トランスフォーマー(ViT)の中身 ~ Multi-Head Attentionを画像処理で解説 ~

แชร์
ฝัง
  • เผยแพร่เมื่อ 20 ธ.ค. 2024

ความคิดเห็น • 31

  • @MasamitsuNakayama
    @MasamitsuNakayama 6 หลายเดือนก่อน +1

    画像系のトランスフォーマーの教材を探していて、唯一見つかりました。大変勉強になります。本当にありがとうございます。ケーブルの事例が本当にわかりやすい

  • @ayatsukiluna7608
    @ayatsukiluna7608 ปีที่แล้ว +2

    更新が続いていて嬉しいです。とても勉強になります。

  • @tyhts0829
    @tyhts0829 2 หลายเดือนก่อน +1

    わかりやすすぎる

  • @hightree0527
    @hightree0527 9 หลายเดือนก่อน +1

    めちゃくちゃに分かりやすい‼️
    ありがとうございます‼️

  • @doggy9745
    @doggy9745 ปีที่แล้ว

    素晴らしい説明ありがとうございます。非常に助かります

  • @カフェ-g8r
    @カフェ-g8r ปีที่แล้ว +1

    画像認識機械学習初心者です
    アテンション機構の仕組み、動画で説明が見れることありがたいです😄
    ポジションエンコーディングとMLP部分についての説明もぜひ動画で見たいです!

  • @北穂高
    @北穂高 7 หลายเดือนก่อน

    絵で解説してくれてめっちゃわかりやすい

  • @shinsokayborg
    @shinsokayborg 7 หลายเดือนก่อน +1

    すごくわかりやすいです。なんでクエリ キー バリューの3つが必要なのか意味がわかりました。

  • @companiontravelingkitsune
    @companiontravelingkitsune ปีที่แล้ว +1

    一番分かりやすい

  • @inception9150
    @inception9150 ปีที่แล้ว +2

    ここで紹介されてる画像処理のためのTransformerのやり方は自然言語翻訳のためのTransformerのやり方とロジック的に違うような感じです。
    自然言語翻訳のためのTransformerの場合、各tokenのQueryが同一tokenのKey及び他のtokenのKeyとの内積結果をsoftMax変換して、その結果をweight としてtoken同士のvalueの加重平均計算に利用されます。同じtokenから算出したweight同士を足し算する事はありません=それはナンセンスからです。
    従って、ここで紹介されてるような一つのpatchが同一patchのKeyや他のpatchのKeyとの内積に対して和を取って、その『帰一化』した値を同じ位置のpatchに掛ける操作の意味は不明です。
    このようなやり方は画像の生成ではなくて、各patch画像の輝度を調整する操作に過ぎません。
    この辺詳しい方にご説明いただければ幸いです。

    • @companiontravelingkitsune
      @companiontravelingkitsune ปีที่แล้ว

      4:00あたりの操作が意味不明ということですか?

    • @inception9150
      @inception9150 ปีที่แล้ว +1

      @@companiontravelingkitsune ご質問ありがとうございます。 正確に5:30あたりです。
      そして、CNNの場合はfilterが『局所的』だと言われたのですが、
      Transformerの場合は、元の画像を複数の小さい四角い領域(patch)に分割して処理の単位とされるので、
      結局『局所的』ではないかという不明な点もあります。
      更にCNNの場合は、訓練によってCNNのfilter係数を学習させるが、Transformerの場合は何を学習するの?という質問もありますね。 
      アディアやご意見あれば議論したいと思います。

    • @companiontravelingkitsune
      @companiontravelingkitsune ปีที่แล้ว

      各パッチ同士の内積をとるので、大域的な特徴を捉えていると言われているのではありませんか?

    • @companiontravelingkitsune
      @companiontravelingkitsune ปีที่แล้ว

      @@inception9150 「同じtoken~ナンセンスだから」のところは、説明で使われているマス目(マトリクス?表?)でいうところの対角成分は意味がない、ということですか?

    • @inception9150
      @inception9150 ปีที่แล้ว +1

      @@companiontravelingkitsune 言語翻訳の場合翻訳先を決めるために言語のcontextにおいて 前後のtokenの相関係数×対応の各関連tokenの後、その和を取りますが、このTH-camの中では相関係数の和を取って同一tokenをかけて結果とします。統計分野と工学分野において、このような計算方法はありえないだと思います。

  • @toyoo_cat
    @toyoo_cat ปีที่แล้ว

    わかりやすくて勉強になります。ジグソーパズルのピースを探すようなイメージに見えます。どことも似ている所は情報量低く、どことも似ていないところは情報量高い(注目点)というイメージでよいでしょうか?

  • @inception9150
    @inception9150 ปีที่แล้ว +1

    大変すばらしい解説です。ありがとうございます。
    ただし、下記のような基本的な事についてまだ分かっていないので、ご教授いただければ、幸いです。
    Q1.CNNの場合はfilterが『局所的』だと言われたのですが、Transformerの場合は、元の画像を複数の小さい四角い領域(patch)に分割して処理の単位とされるので、結局『局所的』ではないか?
    Q2. CNNの場合は、訓練によってCNNのfilter係数を学習させるが、Transformerの場合は何を学習するの?という質問もありますね。
     
    Q3. TransformerもNeuralNetworkの一種で考えて良いのでしょうか。そうであれば、バッチ単位で訓練を行うかと思いますが、訓練用のバッチ画像はみんな内容がだいたい同じの画像ですか、あるいは内容がまちまちで、例えばお互いに回転関係、移動関係のある画像同士を利用して混錬を行うのでしょうか。

    • @VisionSensorChannel
      @VisionSensorChannel  ปีที่แล้ว +1

      A1.
      局所的か大局的かは、特徴抽出時に関係性を見る範囲の違いを表します。
      1層のCNNでは、コンボリューションカーネル内のみでの、画素間の関係性を見ます。
      Transformerでは、パッチ間の関係性を見ますが、パッチ間の距離の制約はありません。
      A2.
      Transformerの中身は、MLPの集まりなので、それぞれのMLPの重みが学習対象になります
      A3.
      Transformerもミニバッチで学習します。また(回転などの)変換は内部のMLPの重みで決まります。MLP一つあたりの変換方法はミニバッチ内で同じですが、MLPがたくさんあるので、いろいろな変換が組み合わされた状態になります
      学習では、これらのより良い組み合わせを決めるイメージです

    • @inception9150
      @inception9150 ปีที่แล้ว

      @@VisionSensorChannel 早速とても素晴らしいご教授本当にありがとうございます! 
      再度確認させていただきます。申し訳ございません。
      画像関係のアプリケーションには4大種類があるかと思います:
      1.Object認識・分類(人間か、車か)
      2.指定したObjectの存在位置( 人間の居る場所と車の位置)特定(位置決め)
      3.画像修復(inpainting, denoising)
      4.訓練画像からこれまでのない画像生成ーーー人間の顔、シーン等(できればバラエティ性が富む)。
      私がよく付き合ってきたのは画像修復アプリで、通常、画像トレニングする時に、CNN系の場合、訓練画像中の対象objectの位置を揃える必要あります(位置ずれに関する許容範囲に限界)。
      そのための訓練画像のobject位置調整の仕事量は莫大です。
      Transformerアーキテクチャーの場合、画像修復アプリのために、訓練画像においての対象objectの画像中の存在位置に関して気にならなくても宜しいでしょうか。
      どんなご見解、アイディアでも宜しいです。いただければ幸いと思います。

    • @VisionSensorChannel
      @VisionSensorChannel  ปีที่แล้ว +1

      @@inception9150
      画像修復はあまり詳しくありませんが、私が知っているAutoencoderと似たものだとすると、
      学習時の位置ずれに対しての敏感さは、ネットワーク構造よりも損失関数に強く依存するとおもいます。
      同じ損失関数ならば、CNNを使う場合とTransformerの場合ではさほど変わらないとおもいます
      一方で、Transformerは画像パターンの知識を、CNNより多様かつ詳細に記憶できることが強みと言われています。
      なので大量の学習画像を使って「事前学習」することがよく行われます。
      そこからのアイデアですが、
      様々な種類の物体を、様々な位置・姿勢に配置した大量の画像データを人工的に使って、Transformerを事前学習しておき、
      アプリに応じた少量の画像でファインチューニングすることで、多少の位置ずれに対しても頑健な復元ができるようになるかもしれません

    • @inception9150
      @inception9150 ปีที่แล้ว

      @@VisionSensorChannel
      貴重なご意見ありがとうございます。色々試したいですね。
      現在の所謂『deep learning』的な方法は適切な訓練サンプルの準備作成は通常の会社にとって大きな負担ですね。
      再度御礼を申し上げます。

  • @shuns1044
    @shuns1044 ปีที่แล้ว

    この動画の資料を会社の勉強会で使用したいのですが、切り取って使ってもいいですか?

    • @VisionSensorChannel
      @VisionSensorChannel  ปีที่แล้ว

      お役に立てればお使いください

    • @inception9150
      @inception9150 ปีที่แล้ว +1

      @@VisionSensorChannel Transform紹介動画本当にありがとうございます! ただ、疑問または不明な点がありますので、ご解釈いただければ大変助かります。
      紹介されてる画像処理のためのTransformerのやり方は自然言語翻訳のためのTransformerのやり方とロジック的に違うような感じです。
      自然言語翻訳のためのTransformerの場合、各tokenのQueryが同一tokenのKey及び他のtokenのKeyとの内積結果をsoftMax変換して、その結果をweight としてtoken同士のvalueの加重平均計算に利用されます。同じtokenから算出したweight同士を足し算する事はありません=それはナンセンスからです。
      従って、ここで紹介されてるような一つのpatchが同一patchのKeyや他のpatchのKeyとの内積に対して和を取って、その『帰一化』した値を同じ位置のpatchに掛ける操作の意味は不明です。
      このようなやり方は画像の生成ではなくて、各patch画像の輝度を調整する操作に過ぎません。
      なので、無意味ではと思いますが、、、是非ご教授お願いします。

    • @VisionSensorChannel
      @VisionSensorChannel  ปีที่แล้ว +1

      ご質問ありがとうございます。
      自然言語処理と同じく、valueと重み(ここで言っているアテンションマップ)の内積をとるのが正しい手順になります。
      概念的な解説を心掛けたため、詳細内容としては説明抜けや間違いがあるかもしれません。
      より詳しい解説としては、以下のサイトなどを同時にご覧いただくことをお勧めします
      cvml-expertguide.net/terms/dl/seq2seq-translation/transformer/multi-head-attention/

    • @inception9150
      @inception9150 ปีที่แล้ว +1

      @@VisionSensorChannel 早速ご返答ありがとうございます。ご案内頂いたサイトを勉強させていただきます。

    • @ちょん吉
      @ちょん吉 ปีที่แล้ว +1

      横から失礼いたします.
      本動画ではわかりやすさのため入力画像と同じ5x5パッチと同じサイズのフィルタを得て互いの内積をとることでattentionを行うと説明されていますが,実際には図の説明から25x25になります.これを線形変換後のValue (サイズは25xW_outとする)との内積をとり,最終的にValueと同じ25xW_outサイズを持ち,特定の領域が強調されたattentioned valueを得ます.その後は説明の通りMulti-headによるattention valueの縦結合+線形変換により最終的な出力(これはTransformer論文のモデル図のadd&Normブロックを見てもわかりますが,skip connectionを適用するため,線形変換前=25xW_inのサイズとなる)を得ます.
      概念的にはこちらの動画でなにも問題なく,NLPでのTransformerと同様の説明となっていると理解しています.
      こちらの動画も参照されるとよいかと思います.
      th-cam.com/video/mMa2PmYJlCo/w-d-xo.html