Udemyで、Kerasの機械学習を、学習する

2018年8月6日プログラミング

機械学習を学習する

一年くらい前に機械学習のUdemyのグラスを取りました。そのクラスも為にはなったのですが、8割りくらいのところで挫折しました。なぜなら、前半線があまりにもデータサイエンスしすぎていて、統計系の方法論が多いのです。高校時代から確率統計的な科目が苦手だった私からすると、簡単に言うとつまらなくらりました。
そんな中、最近のディープラーニングの流行りで気になっていたKerasを学ぶ講座を見つけました。Udemyの講座です。お安いです。
これを受けてみました。

 

機械学習の遠い想い出

20年近くも昔のことになりますが、私の大学時代の研究テーマはニューラルネットによる文字認識や、音声認識でした。
その当時は、コンピューターの計算能力が今とは比較にならないほど貧弱です。20ピクセル四方位の手書きの白黒画像(いや、2値の白黒だったかも知れません)を10クラスに分類するようなニューラルネットのシミュレーションをしてました。コンピューター業界はダウンサイジングという小型化の流れの中で、科学計算用のデスクトップタイプのワークステーションが百万円切ったとかというくらいの時期。IntelのPentiumも発売されたばかり、とかそんな感じだったと思います。

 

安くなったとは言え、3層の全接続のネットの学習(トレーニング)をするのに余裕で一晩かけてました。
それが、今や普通のパソコンで、GPUでなくとも、そして、もっと階層の数や一階層辺りのノードの数が多くとも、ものの数分でトレーニングが終わってしまいます。素晴らしいです。
code coding computer cyberspace
Photo by Pixabay on Pexels.com

この20年くらいで起きたブレークスルー

私が学生で研究していた頃のニューラルネットの研究は、基本的にはback propagationという今でも使われているアルゴリズムを使った研究がメインだったように思います。ただ、研究対象としては、飽きられていったようです。コンピュータの能力が 貧弱と言うこともありますが、トレーニング自体が上手く進まない問題や、そもそも同じ問題を別な方法でやらせた方が効率的など、実用性が見いだせなかったのだと思います。(その場合は、途中の処理を人間がやっているということになる訳ですが。。。)

 

 

しかし、時代も流れ、力業でコンピューターをぶんまわすだけで、当時はできなかった仕事ができるようになるので実用性は上がります。計算能力に合わせてニューラルネットの階層を増やすこともできます。

 
一方、階層を増やすのは、back propagationというアルゴリズム自体の問題もありました。ネットワークの出力のエラーを訂正して、入力層へ誤差の伝搬する事で学習と言うプロセスを行いますが、層が増えると学習が進まなくなるのです。特に入力に近い層の学習ができなくなります。入力に近いほどそれまでは人間様が手動でやっていたような、特徴量の抽出が認識率に大きな影響を与えますので重大です。この問題を解決するのが、deep learning、つまり、ネットワークの出力より深い層の学習をさせる方法です。このお陰で、昨今の機械学習といえば、deep learningといったトレンドになりました。例えば、auto encodingと言われる、入力に近い層であらかじめ学習させておく方法を取ることで、特徴量をネットワーク自体が見つけ出し、それを繋ぎ合わせることで、深い層の学習が進まない問題が解決されてきたようです。

私も、この世界離れてしばらく経ちますし、知識のキャッチアップも仕切れないので、週末に趣味でUdemy受講、という流れになっております。

 

Udemyの講座の内容

私が受講した、

のコースですが、内容としては、pythonの環境から始まりアプリの作成まで、実用的なポイントが押さえられています。
  • Anacondaのインストールによるpythonの準備
  • Pythonの機械学習のライブラリであるTensorflow、Kerasのインストール
  • 開発環境としてのATOMエディタやATOMの便利プラグインのインストール
  • Flickrを使った画像データの収集プログラムの作成(Flickrのアカウント作成の方法も)
  • 入力データをKerasで使えるようにするプログラム作成
  • Kerasの学習アルゴリズムの実装
  • コマンドラインからニューラルネットの学習後のモデルの実行
  • WebアプリのフレームワークFlackの使い方の説明
  • Flackで、Kerasのニューラルネットのモデルを走らせ、結果を返すアプリの作成
とても実用的な内容です。すぐにとっつきやすいと感じる方も多いと思います。(が、講師が書いているプログラムは色々間違いがあります)

 

ただ、私には物足りなすぎました。私自身はpythonもそこそこ趣味で使えますし、Webアプリも書いたことがあります、趣味ですが。一方、講義ビデオで出てくるKersaのコードはネットのチュートリアル程度で単純で、しかもビデオの中でコピペしてるだけ。私は、もう少し、こういうアルゴリズムやこういうモデルを作るのには、Kerasをこう使えばいいのだ、といった根本的な理解ができるようなものを期待していました。この値段(1,400円)では無理でした。
ですので、
  • 本当に初心者で環境構築から行う
  • チュートリアルを実行するのがそもそもどうしていいかわからない
  • 内容はともかく、動くものを触ってみたい

というぐらいの方にしかおすすめできないのではないかと思いました。
ただ、3時間程度の講義ビデオの中で全コードを打ち込みが完了してしまう程度の僅かなプログラムで、私が大学時代に夜間にコンピューターセンターのリソースを使い倒していた(大げさ)頃の機能以上のことができてしまう。これは、ある意味すごいことです。そりゃ、新しいサービスがポンポン生まれてはなくなるという社会になるよな、というくらいの進化です。改めて、そう思う体験となりました。