次がいよいよ学習だよね。あれ、「トレーニング」って書かれているけど、トレーニングと学習は意味が違うの?
微妙な違いだけど、トレーニングデータを使って、機械学習のモデルをトレーニング(訓練)していくことが「学習」、と理解しておくといいよ。ちなみに、ディープラーニングのニューラルネットワーク(=ディープ・ニューラル・ネットワーク:Deep Neural Networkと呼ばれる。以下、DNN)においては、次のような意味になるわね。
あと「ハイパーパラメーターのチューニング」って、カタカナが多くて読み間違えちゃいそうだけど、これは何?
DNNでは、モデルの構成や設定はトレーニングプロセスによってある程度自動的に調整・最適化されるんだけど、一部には人間がチューニング(調整)しなければならない設定――例えばネットワークの層の数やユニット数など――があって、そういった設定をハイパーパラメーター(hyperparameter)と呼んでいるの。ハイパーパラメーターが最適な値になるまで、次の手順(5)の「モデルの評価」からこの手順(4)「モデルのトレーニング」に舞い戻ってきて、「チューニング〜トレーニング〜評価」を何度も繰り返し実行していく必要があるの。でも最近は、最適なハイパーパラメーターを探すための機能をツールが提供してくれていたりもするので、比較的簡単にチューニングできるようになってきてはいるのよ。
あと、過学習(Overfitting:学習で過去のデータにフィットし過ぎると、新しい未知データには逆にフィットしにくくなる現象)を抑制するために正則化(Regularization)という処理が行われることも多いから、この言葉も覚えておいてね。
手順(5)の「推論」は前回の説明で出てきたね。学習済みモデル(トレーニング済みモデル:Trained modelとも呼ばれる)を使用することだったよ。
そう。よく覚えてたね! 推論(inference、もしくは推定)とは、モデルにデータを入力して、そのモデルから結果を出力として受け取ること。つまりここでは、教師あり学習であれば、精度検証データを使ってモデルの精度(accuracy)をチェックするということね。
チェックって、どうやってするの?
通常は出力と正解ラベルの値を比較して、モデルに適した統計的技法を使用することで「どれくらいの精度が出ているか」という数値的な性能指標(つまり成果)を見るわね。他には例えば画像生成などであれば、出力画像などを人が見て問題ないかを検証することもあると思う。
あとは、先ほどのチューニングに戻って、いろんなパターンでモデルを作ってから評価していけばいいんだよね?
そうそう。そうやって、学習する際のパラメーターをちょっとずつ変えながら、できた複数の学習済みモデルの中から、最も精度が高いモデルを選択すればいいの。
これで完成かな?
最後に、未知のテストデータに対する学習済みモデルのパフォーマンス(汎化性能:Generalization performance)を評価しておいた方がいいよ。すでに説明したとおり、精度検証データにはデータ慣れによるバイアス問題の可能性があるから、あらためて真新しいテストデータを使って、運用環境にできるだけ近いコンテキストで最終チェックするの。
あ、そういう話もあったね。ちなみに、どうやっても高い精度が出なかった場合はどうすればいいの?
「(2)〜(5)を繰り返す」と書いておいたように、「機械学習の手法の選択」にまで戻ってやり直すことも考えた方がいいね。
え〜!? (2)って振り出しみたいなもんじゃないの! そりゃ大変だなぁ。
最後に、選択した学習済みモデルを、運用環境で実行できる形でエクスポートして、AIサービスやアプリケーションに組み込めば完成。よくあるパターンは、機械学習エンジニア以外の開発者でも利用しやすいように、Web APIとして呼び出せるようにサーバー(主にクラウド)を用意して、そのAIを使いたい開発者や会社に引き渡すことね。
ITのソフトウェア/Web開発は得意なので、ここは自前の知識でできそう。でも、手順(2)〜(5)をマスターするまでには、何カ月ぐらいかかるんだろう……。
そうだね。筋が良ければ半年ぐらいで、何とか1人で機械学習できるようになる人はいるよ。だけど、機械学習が本当に適切にできるようになるまでには、たくさん覚えることがあるのは確か。だけど心配しないで。一歩一歩、「習うより慣れろ」で、ちょっとずつできることを増やしていってあげるから。任せて。
藍先生、よろしくお願いします!
(あら、急にしおらしくなっちゃって……)もちろん正攻法なら、データサイエンスの基礎から丁寧に学習すべきなんだけど、このシリーズでは、特に「(2) 手法の選択」と「(4) モデルのトレーニング」にフォーカスして具体的に説明していくよ。それ以外の(1)/(3)/(5)/(6)については概要紹介だけにして、具体的な説明には踏み込まないようにするね。
はい。(シリーズ??? よく分かんないけど、スルーしよっと)
明日から、まずは藍のやることをまねてみて。特に(4)の工程は、ライブラリという便利なものが使えるから意外と簡単なんだよ。だからソフトウェア開発スキルのあるマナブであれば、とりあえずディープラーニングを体験することは今すぐにできるはずだよ。
よかった! ところでディープラーニングのライブラリにはどんなのがあるの?
ディープラーニングが扱える代表的なライブラリには、
があるよ。どちらもできることに大きな違いはないから、あとは使ってみてどっちの使い心地が良いかで決めればいいと思う。好みのプログラミング言語を選ぶのと一緒ね。
どっちもマスターしたい!!!
このシリーズでは、まずTensorFlowを使ったパターン、次にChainerを使ったパターンで、ディープラーニング実践の基礎を一通り学んでいくよ。だから各ライブラリが、具体的にどういうものかは、それぞれの回で紹介するね。
はい。必死でついていきます!
今日は最後に、マナブのようなソフトウェア/Web開発が得意な人が、機械学習に取り組む際の心構えについても説明しておくね。
えっ、何?
一般的にソフトウェアやWebの開発は、「具体的な完成目標」があるよね。最初の0%の状態から作り始めて、完成度の%が徐々に上がっていき、100%になったら、ソフトウェア/Webをリリースするイメージ。目標に向けて前進して積み上がっていくから、常に達成感を感じられる作業なのではないかと思う。基本的に自分が思ったものが思い通りに作れる。いわゆるクリエイティブ職ね。
機械学習は違うの?
機械学習は、ここまでに「試行錯誤」「繰り返す」という言葉が何度か出てきたように、「調整〜作成〜評価」を繰り返しながらベストな精度を探していく作業になるの。完成度というか精度が100%になることは基本的にないのよ。自分が思ったものが思い通りに作れるとは限らないの。しかも、より良い精度が出せるように、最新の手法やアルゴリズムも追いかけて試していく必要がある。だから機械学習エンジニアは、いわゆる研究職にかなり近いエンジニア職だと思うの(ちなみにデータサイエンティストは研究職にかなり近いデータアナリスト職のことね)。もちろんプログラミングスキルはムダにはならないんだけど。
大丈夫。試行錯誤しながら作り上げるのも大好きだから。
それは良かった。あと、ライブラリがプログラミングの難しい部分をかなりカバーしてくれているから、機械学習のプログラミング作業は、ソフトウェア/Web開発のそれと比べると、圧倒的に短くて簡単になるわね。まとめると、「プログラミングする」というのはあくまで目的を実現するための補助的な作業となって、「手法を選んでモデルを学習させて精度を高める」という今日説明した作業が、機械学習エンジニアの日常的なメインの仕事になるよ。
了解! それにしてもチョコレート工場、そっちのけだったね。
(うーん、確かに……。没頭すると他のことが見えなくなっちゃうのよね、わたしは……)あはは……。とりあえずお土産にもらった新製品の板チョコを食べてみようよ。
――マナブが板チョコを食べて、白目を抜いて「うぁあぁあぁ」と奇声を上げる――
テレビドラマの甘太朗(かんた○○)の真似www
……。(前回の冒頭で「忘れた」と思っていたのに、まだ覚えていたのか……。)
あっ、前みたいに暗黒にするのはナシやで。😒
(ぎくぅー)そ、そ、そんなことしないよ。えへへ、へ、へ……😅
で、次回のおやつは何?
それは秘密だよ。次回からは手作業しながら学ぶから、会話形式ではなくなるので。
え〜!(泣)
ここまでの話は、ディープラーニングをマスターする冒険に出発するための準備体操のようなもの。これから長い旅が始まるから頑張ってね。
はい、藍先生!(キリッ)
次は、
に進んでね。
Copyright© Digital Advantage Corp. All Rights Reserved.