連載
» 2018年04月18日 05時00分 公開

機械学習&ディープラーニング入門(概要編):Lesson 3 機械学習&ディープラーニングの、基本的なワークフローを知ろう (3/3)

[一色政彦,デジタルアドバンテージ]
前のページへ 1|2|3       

(4)モデルのトレーニング

図6 モデルのトレーニング 図6 モデルのトレーニング


マナブ:質問

次がいよいよ学習だよね。あれ、「トレーニング」って書かれているけど、トレーニングと学習は意味が違うの?


藍:厳しく教える

微妙な違いだけど、トレーニングデータを使って、機械学習のモデルをトレーニング訓練)していくことが「学習」、と理解しておくといいよ。ちなみに、ディープラーニングのニューラルネットワーク(=ディープ・ニューラル・ネットワークDeep Neural Networkと呼ばれる。以下、DNN)においては、次のような意味になるわね。

  • トレーニングtraining): 機械学習アルゴリズムを活用して、ネットワークの重みweight重み付け)を変えていくこと
  • 学習learning): 機械学習アルゴリズムを活用してトレーニングしながら、ネットワークモデルを構築していくこと

マナブ:理解不納

あと「ハイパーパラメーターのチューニング」って、カタカナが多くて読み間違えちゃいそうだけど、これは何?


藍:優しく教える

DNNでは、モデルの構成や設定はトレーニングプロセスによってある程度自動的に調整・最適化されるんだけど、一部には人間がチューニング(調整)しなければならない設定――例えばネットワークの層の数やユニット数など――があって、そういった設定をハイパーパラメーターhyperparameter)と呼んでいるの。ハイパーパラメーターが最適な値になるまで、次の手順(5)の「モデルの評価」からこの手順(4)「モデルのトレーニング」に舞い戻ってきて、「チューニング〜トレーニング〜評価」を何度も繰り返し実行していく必要があるの。でも最近は、最適なハイパーパラメーターを探すための機能をツールが提供してくれていたりもするので、比較的簡単にチューニングできるようになってきてはいるのよ。

 あと、過学習Overfitting:学習で過去のデータにフィットし過ぎると、新しい未知データには逆にフィットしにくくなる現象)を抑制するために正則化Regularization)という処理が行われることも多いから、この言葉も覚えておいてね。

(5)モデルの評価

図7 モデルの評価 図7 モデルの評価


マナブ:にっこり

手順(5)の「推論」は前回の説明で出てきたね。学習済みモデル(トレーニング済みモデルTrained modelとも呼ばれる)を使用することだったよ。


藍:にっこり

そう。よく覚えてたね! 推論inference、もしくは推定)とは、モデルにデータを入力して、そのモデルから結果を出力として受け取ること。つまりここでは、教師あり学習であれば、精度検証データを使ってモデルの精度accuracy)をチェックするということね。


マナブ:質問

チェックって、どうやってするの?


藍:優しく教える

通常は出力と正解ラベルの値を比較して、モデルに適した統計的技法を使用することで「どれくらいの精度が出ているか」という数値的な性能指標(つまり成果)を見るわね。他には例えば画像生成などであれば、出力画像などを人が見て問題ないかを検証することもあると思う。


マナブ:理解不納

あとは、先ほどのチューニングに戻って、いろんなパターンでモデルを作ってから評価していけばいいんだよね?


藍:にっこり

そうそう。そうやって、学習する際のパラメーターをちょっとずつ変えながら、できた複数の学習済みモデルの中から、最も精度が高いモデルを選択すればいいの。


マナブ:にっこり

これで完成かな?


藍:厳しく教える

最後に、未知のテストデータに対する学習済みモデルのパフォーマンス(汎化性能Generalization performance)を評価しておいた方がいいよ。すでに説明したとおり、精度検証データにはデータ慣れによるバイアス問題の可能性があるから、あらためて真新しいテストデータを使って、運用環境にできるだけ近いコンテキストで最終チェックするの。


マナブ:質問

あ、そういう話もあったね。ちなみに、どうやっても高い精度が出なかった場合はどうすればいいの?


藍:優しく教える

(2)(5)を繰り返す」と書いておいたように、「機械学習の手法の選択」にまで戻ってやり直すことも考えた方がいいね。


マナブ:がくっ

え〜!? (2)って振り出しみたいなもんじゃないの! そりゃ大変だなぁ。

(6)納品・本番運用

図8 納品・本番運用 図8 納品・本番運用


藍:にっこり

最後に、選択した学習済みモデルを、運用環境で実行できる形でエクスポートして、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


藍:目が点

……。(前回の冒頭で「忘れた」と思っていたのに、まだ覚えていたのか……。)


マナブ:ぷんぷん

あっ、前みたいに暗黒にするのはナシやで。😒


藍:あせる

(ぎくぅー)そ、そ、そんなことしないよ。えへへ、へ、へ……😅


マナブ:質問

で、次回のおやつは何?


藍:優しく教える

それは秘密だよ。次回からは手作業しながら学ぶから、会話形式ではなくなるので。


マナブ:泣く

え〜!(泣)


藍:厳しく教える

ここまでの話は、ディープラーニングをマスターする冒険に出発するための準備体操のようなもの。これから長い旅が始まるから頑張ってね。


マナブ:爆笑

はい、藍先生!(キリッ)


藍:にっこり

次は、

に進んでね。

【まとめよう】ディープラーニングの基本的なワークフロー

  • 機械学習のワークフロー: 以下の(1)(2)(3)(4)(5)(6)の順で進め、(2)(5)(特に(4)(5))を繰り返すことで、精度を高める
  • (1)データの準備: 使用するデータを決めてから収集する。公開データセットの利用や、Webスクレイピングによる収集などの方法もある
  • (2)手法の選択: 最適な結果が出せる機械学習の手法を選択する。ディープラーニングであれば、学習方法やアルゴリズムも決定する
  • (3)前処理: データを選別。機械学習で使用可能な形に修正する(データラングリング)。変換テクニックを活用。データを分割する
    • データ変換テクニック: 正規化/標準化、画像・映像の加工(OpenCVなど)、形態素解析(MeCabなど)、データ拡張など
    • データセットの分割: トレーニングデータとテストデータに分割。教師あり学習では、さらに精度検証データも分割して用意する
  • (4)モデルのトレーニング: トレーニングデータで機械学習モデルをトレーニングする(=学習)。ハイパーパラメーターを調整する
  • (5)モデルの評価: 評価データで推論して学習済みモデルの精度をチェック(教師あり学習)。最後にテストデータで汎化性能も評価する
  • (6)納品・本番運用: 選択した学習済みモデルをエクスポートして、AIサービスやアプリケーションで使えるようにすれば完成
  • ディープラーニングが扱える代表的なライブラリ: TensorFlowやChainerが特に有名。本シリーズで使い方の基礎を解説していく

「機械学習&ディープラーニング(概要編)」のインデックス

機械学習&ディープラーニング(概要編)

前のページへ 1|2|3       

Copyright© Digital Advantage Corp. All Rights Reserved.

編集部からのお知らせ

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。