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