2019--Shareこの記事についてこの記事に書かれている内容は以下の通りです。mixup[2]を紹介し、最終層でまぜるとより良い結果が得られそうだということを示します。実際にtensorflowで実装してみて、実際にそのような結果が得られるかを確かめました。Zhangらによって提案されました。Beta分布からサンプリングした混合比率をもとに、入力・出力ともに混合させてデータ拡張を行う手法です。これを使うことで、決定境界が滑らかになるため汎化性能が向上すると言われています。上の数式からもわかるように、既存のデータを混ぜ合わせたものを拡張データとして使います。簡単なデータを使ってMIXUPをしてみると、下記のようになります。1)、ピンク色が拡張されたデータで,混合比率によってラベルyは0~1.の値をとります。様々なalphaでMIXUPを実施したのが下記の図です。α=1を境界にして、実データに近い場所に拡張されるのか(α<1)、中間に拡張されているのか(α>1)、が分かれています。5.0)(右)データ全体にMIXUPをかけると下記のようになります。Mixupmixupの問題点MIXUPで生成されたデータは、全て良いデータになるとは限りません。このデータでいうと下記図の左は決定境界を滑らかにする良いデータになりそう(赤と青を混ぜているため、ラベルの値は0~1の値)ですが、右は良いデータになりません。拡張されたデータのラベルは全て”赤”となっている(ラベル赤同士のデータを混ぜているため)にも関わらず、青データの特徴量空間と被ってしまっているからです。mixup[2]です。Mixupでは、より特徴量が整理された中間層で混ぜるMIXUPを行うデータ拡張手法です。中間層で行うMIXUP上図は入力層・中間層それぞれでMIXUPを行なったときの概念図です。入力層MIXUP(左)では、青と赤の特徴量空間が入り混じっているおかげでいい拡張データは得られません。中間層では入力層に比べると特徴量空間が整理されているため、良い拡張データが得られます。どこで混ぜれば良いのかでは、どの層でMIXUPするのが一番良いのでしょうか?そのヒントとなりそうな研究[3]がありました。LossというものをResNetの中間層に導入して、その挙動を調べています。Lossは値が大きいときはクラス別の特徴量が絡み合っている状態を示し、逆に小さいときにはクラス別に特徴量が分離できていることを示しています。Lossの値を調べたのが下の図です。ResNetは高性能な画像分類ネットワークとして知られていますが、最終層以外ではクラス毎の特徴量を分離できていないことを示しています。[3]のFig16よりこのことを踏まえると、ResNetを使う場合は最終層でMIXUPすれば良いのではないかという仮説が出てきます。Mixupの原論文[2]を見てみると、最終層でMIXUPした場合が一番良い結果になっています。[2]のFig6より。Mixupの著者達はこの結果自体を重視していなかったようです。実際に最終層MIXUPと入力層MIXUPを比較してみます。Notebook)は、私のGithubにアップロードしておきます。中間層で混ぜるという操作が必要になるため、MIXUP_layerを下記のように作ります。このレイヤーに2つの入力と比率を入れることで、その比率に従ってMIXUPするレイヤーになっています。mixupを最終層で行う)は以下のように実装できます。使っているのはResNet18で、実装に関しては以前書いたブログをご覧ください。学習コードの実装コードの一部を抜粋して掲載します。毎にbeta分布に従って乱数を生成し、その比率でMIXUPをしています。loss一番よかったのはαが0.2の最終層MIXUPですが、alpha=1.0でもほとんど変わらない結果を出しています。mixupはαが小さい方が良く、1.0を超えると急激に精度が悪化します。Mixupほどは悪化しません。この差は、Mixupする特徴量空間が整理されているかどうかを反映していると考えられます。mixupでも大きいαで精度が悪化しているのは、特徴量空間が整理されていると雖も、最終層の特徴量空間は下記のようなものになっていると考えられるため、内挿データが必ずしも良い値になっているわけではないことを示しています。[4]のFigure2より引用。mixupを紹介し、最終層で混ぜると良い効果が得られることを示しました。一言論文紹介とかしてます。speechTeams。