個人的 Neural おもしろ Network

この投稿はrioyokotalab Advent Calendar 2020 23日目の投稿です。

adventar.org

勾配法の発展

深層学習は最近では主に画像分類の分野において今までの機械学習では達成できなかったような精度を出せるようになっています。それを達成したのは勾配法というただ一つのアルゴリズムでどんな構造のモデルであっても学習してしまおうというシンプルなアイデアであると言えます。こうすることで、クラス分類であればクロスエントロピーを、回帰であれば、最小二乗法を用いてその背後に適当なニューラルネットを置くことで幅広いチューニング性と拡張性を獲得しました。そして、それを利用して、最近では、セグメンテーションタスクや物体検出タスクのような、本来であれば、損失から勾配が取りづらいようなタスクに対しても様々な工夫を凝らして勾配を取り、勾配法による学習を可能にしています。

勾配法による機械学習の流行によって、勾配が取れる構造はたくさん開発されてきました。それらを組み込んだモデルは従来の機械学習では想像されてこなかったインパクトのある成果を産み出してきました。今回はその中から個人的に面白いと思うネットワークTop3を紹介していきたいと思います。

第3位 Spatial Transformer Networks

paper: https://arxiv.org/abs/1506.02025

画像の配置方法の勾配を取れるようにした構造です。

f:id:deoxy:20201223234556p:plain

画像の変換をグリッド状のサンプリングによって行うことで、各ピクセルが求めている変換方向を勾配として取ることができるようになっています。これをまとめてAffine変換のパラメータなどに逆伝播させることで、Affine変換の学習などが行えます。

STNは勾配のみで画像の切り抜き位置を探すことができるので、弱教師あり主体オブジェクト位置検出や、背景の切り取りなどが行えます。また、通常のネットワークの前にSTNを含むCNNを配置することで、ネットワークが見る位置を限定するとともに、判断根拠を示すことができたりもします。

f:id:deoxy:20201223235551p:plain

pytorch.org

第2位 Generative Adversarial Networks

paper: https://arxiv.org/abs/1406.2661

高品質な生成モデルを学習するアルゴリズムです。 画像を生成するGeneratorと生成データか実データかを見分けるDiscriminatorという二つのニューラルネットをGeneratorはDiscriminatorを騙せるように、DiscriminatorはGeneratorの生成した画像を見分けられるように、敵対的に学習することで、画像データを用意するだけで、それっぽい画像の生成を可能にした驚きのアルゴリズムです。

f:id:deoxy:20201223233651p:plain

ヤン・ルカンは、GANsについて、「機械学習においてこの10年間で最も興味深いアイデア」("This, and the variations that are now being proposed is the most interesting idea in the last 10 years in ML, in my opinion.")と評価している[2]。

by 敵対的生成ネットワーク - Wikipedia

今も活発に研究されていて、生成モデルに限らず、この敵対的損失を利用した様々な応用手法も開発されています。例えば、Bengali.Ai Handwritten Grapheme Classificationというコンペティションで1stを取った手法では、半教師あり学習の一部に敵対的損失を用いた構造が含まれています。

www.kaggle.com

pytorch.org

第1位 Connectionist Temporal Classification Loss

paper: https://www.cs.toronto.edu/~graves/icml_2006.pdf

通称CTC Lossと呼ばれています。CTC Lossは時間均一な系列情報を離散的な単語的系列情報にクラス分類してくれるという優れものです。具体的なタスクを示すなら、音声の文字起こしというタスクに使われる物です。例えば、音声の波形情報からCNNで特徴量抽出を行って、その発音を50音に直すようなタスクの学習が行えます。この時、50音のそれぞれの発音時間はまばらなので、特徴量マップにもそのまばらさが現れてしまいます。それを良い感じにまとめてくれるという機能が追加されていてしかも勾配が取れるというびっくりアルゴリズムなのです。

下図は論文から引用した物ですが、CATの3文字をどの時刻から持ってくることが可能かというパスの総パターンを表現しています。白い点はblankと呼ばれるクラスで、空欄であるということを示しています。このパスによって、時刻ごとのクラスへの様々な割り当て方を考えることができます。 f:id:deoxy:20201223225743p:plain

例えば、次のような割り当て方が考えられます。

f:id:deoxy:20201223232405p:plain

それぞれの割り当て方の確率は特徴マップがそのクラスに割り当てられる確率を系列全体で総積を取ることで計算できます。p_1 \ldots p_n そして、損失関数としては、CATという系列に割り当てられる確率が欲しいので、すべての割り当て方の確率の総和を取れば良いことになります。\sum_{i=1}^n p_i

この確率を最大化するように学習すれば良いという話なのですが、すべての割り当て方を網羅するのは現実的ではありません。それを動的計画法を含む天才的なアルゴリズムで可能にしたのがCTC Lossなのです。

応用先は、音素解析、光学文字列認識などがあります。

pytorch.org

まとめ

今回は、勾配法で学習するモデルに組み込める勾配を扱える面白いネットワークの紹介をしました。自分でただタスクに取り組んでいるだけでは絶対に思いつけないようなユニークなモデル構造を発明した先人には頭が上がりません。

こういうユニークなモデルを駆使して、なんか面白い物を作ってみたい物ですね。