はじめに
ポスドクから民間企業のサラリーマンにキャリアチェンジしてから約2年10ヶ月が経ちました。本記事では、昨年のAdvent Calendarの記事に引き続き、2年目の1年間、仕事で経験したことや学んだことをまとめした。また、趣味で行っている深層学習やWavelet の勉強、研究についても記載しました。こちらは、少々専門的な内容となっております。
今年は最適化アルゴリズムの開発を約2ヶ月(2ヶ月と一週間程度)、画像認識のアルゴリズム及びソフト開発を約10ヶ月実施しました。分析ではなく開発よりの案件を希望しておりまして、その希望をプロジェクトのアサインに反映していただきました。
配送最適化アルゴリズム開発(約 2ヶ月)
商品の最適な配送計画を算出するアルゴリズムを構築し、Pythonで実装、ライブラリー化しました。データ構造は木を使って設計しました。このプロジェクトで、Pythonのコーディングスキルがさらに向上しました。
画像認識のアルゴリズム及びソフト開発(約10ヶ月)
目視による画像チェックを自動化するために、画像認識アルゴリズムを開発、実装しました。高速な処理とメモリ消費量を抑えることが必要だったので、C/C++でアルゴリズムを実装しました。ただし、速い速度が求められない一部のアルゴリズムはPythonで実装して開発、検証しました。
C言語は実装経験が数年あったのですが、C++はほぼ未経験で基本的なことしか知らない状態でした。本プロジェクトを通じて、STLやC++様々な機能を習得しC++のスキルが大幅に向上しました。これにより、ある程度自信を持ってC++コードを実装できるようになりました。
ソースコードのバージョンはGitで管理しました。本プロジェクトでは、一つのファイルを複数人で編集する等、密な連携が必要なこともあり、Gitの様々な機能利用する必要がありました。これによって、Gitのスキルが大幅に向上しました。
深層生成モデルの研究
業務時間外に趣味で深層学習やWavelet Scattering (Waveletを使った特徴抽出法) を勉強し、Wavelet Scatteringを使った深層生成モデルを研究しています。
深層学習とWavelet Scatteringの勉強
深層学習に関してあまり詳しくなかったので、書籍、Webサイト、アイシア=ソリッドさんの動画等で深層学習を勉強しました(e.g., 畳み込み層、バッチ正規化、Optimizer、RNN、LSTMなど)。認識や予測モデルよりも深層生成モデルに興味がわいたので深層生成モデルを中心に勉強しました。深層生成モデルの中でも特にVAEに興味がわき、力を入れて学習しました。統計的モデリングやベイズが好きなこと、様々な応用、拡張が考えられることが理由です。中でもβ-VAEは、教師なし学習でDisentangled表現を得ることができるため、非常に魅力を感じました。
Waveletを使った機械学習にも興味があったのでWavelet Scatteringを勉強しました。Wavelet Scatteringは局所的にシフト不変であるなど、パターン認識等への応用において、優れた性質を有しています。計算手順はCNNに似ているのですが、パラメータを学習する必要がありません。具体的には、時系列データ(音響・音声信号等)、画像データに対するWavelet Scatteringの論文を調査し、Wavelet Scatteringの性質、パターン認識への応用について学習しました。論文では、Wavelet Scatteringによる特徴量と他の手法による特徴量をSVM等に入力して認識率を比較するといった検証がよく行われていました。データ数が少ない場合(数百から数千)は、Wavelet Scatteringによる特徴量を使った認識が当時のSOTAを達成しており、パターン認識においては、データ数が少ない場合に非常に有力な特徴抽出法であると思われます。また、Wavelet ScatteringがCNNに似ていることもあり、Wavelet ScatteringをDNNの一部に組み込む論文もあります。例えば、DNN認識モデルの第一層にWavelet Scatteringを組み込んで、Wavelet Scatteringの出力をDNNに入力するといった方法が提案されています。
Wavelet Scatteringを用いた深層生成モデルの改良
Wavelet Scatteringを用いた画像の深層生成モデルも提案されています。画像をWavelet ScatteringとPCAでエンコードして、得られた潜在変数ベクトルをDCGANのGeneratorのようなネットワーク入力して画像を復元するモデルです。この生成モデルは、エンコーダーが解釈可能であり、かつ、学習が必要なパラメータを有していない(エンコーダーに学習が必要なパラメータが含まれていない)といったメリットがあります。しかし、正規乱数から生成した画像の質は悪く、生成モデルとして不十分です。この画像の生成能力を改善するための研究を行っています。
なお、こちらのブログでWavelet Scatteringを用いた深層生成モデルを解説しています。よろしければご覧ください。