Tweetこんにちは!かわしま@食を楽しむエンジニアです。先日クッキーの詰め合わせをいただきました。「クッキーなんて」と思わないで下さい。(甘いものは別腹とか言いますが、人によります。私は別にならない側ですw)。そんな私でも、このクッキーは食べやすく飽きがこないことにびっくり。素朴な風味を守りつつ、時代に合わせて少しずつ改良をしていると想像できます。大正時代の初め頃に、現在の大手製菓メーカーの多くが登場していますね。前回のおさらい前回はTensorflowにおけるデータフロー演算の仕組みを見ていきました。その際、最急降下法や学習、loss(損失)など聞き慣れない用語が出てきたと思います。それらは機械学習に共通する用語です。深層学習は機械学習の一種であり、深層学習を理解するには機械学習の知識が欠かせません。今回は機械学習に共通の用語・仕組みを整理してみたいと思います。はじめに:機械学習の目的を知る私たちの周りには処理手順が不明確な、なぜか分からないがそうなるものがたくさんありますね。スーパーに行けば、私たちは売り場のリンゴをなぜか「リンゴだ」と認識できますし、自転車は練習することでなぜか乗れるようになります。認識できるのか、なぜ乗れるようになるか、過程がはっきりしていません。私たちは学習し、行動に移せています。このような、理由や処理手順が明らかでない事象をコンピュータでも処理できないのか......こうした考えのもと研究されてきたのが機械学習です。リンゴを認識できる能力を何らかの手法でモデル化して、コンピュータで再現しようとする技術は、機械学習の一種であるパターン認識と呼ばれる問題になります。処理手順がはっきりしているものは自動化・効率化しやすいですよね。人間が1つ1つ処理手順を決め、その1つ1つが常に同じ結果になるようプログラミングすれば、コンピュータにより処理の自動化を図れます。私たちの生活のいたる場所で活用されているほとんどのシステムは、処理手順がはっきりしているものになります。目的に応じて適した処理の方法・システムがあるということです。機械学習を「明示的にプログラムしなくても学習する能力をコンピュータに与える研究分野」と初めて定義したのはアーサー・サミュエルと言われています。彼が機械学習を定義したのは1959年のことです。現在では多くの分野で活用されています。多くの企業が人工知能分野への投資を活発化させています。Learningなのか、呼び方は本質的な問題ではないと思います。色々な機械がネットワークで繋がり、相互に作用し始めていること。その制御やUIなどに、機械学習を利用していることが重要なのですね。機械学習の仕組み目的と活用例にふれたところで、機械学習の仕組みを見ていきます。機械学習と聞くと「機械が勝手に学習する・勉強する」との印象を受けますね。:W600]おとぎの世界だと小人が夜中にやってくれそうですが、現実には、そんな都合の良いことはなさそうです。機械学習には、規則性やパターンを見つけ出す仕組みをプログラムした学習器と、学習器に投入する訓練データを用意する必要があります。学習器が訓練データから抽出した規則性やパターンは学習モデルと呼ばれます。この学習モデルを活用してさまざまなデータの解を出していきます。機械学習のプロセスは学習処理と判定処理に分類できます。訓練データを学習器に投入して学習モデルを生成します。学習処理で生成した学習モデルを利用して未知のデータを判定します。このように、手続きが明確でないタスクに対して、そのタスクを遂行するための学習モデルを訓練データから作成し、その作成した学習モデルを利用して未知のデータを判断すること、これが機械学習の基本的な仕組み・定義になります。学習処理で用いる訓練データにもいくつか種類があります。手法で分類してみましょう。入力データとそのデータが何かが分かるラベル(教師データ)をペアで用意し、学習器に投入します。初めは間違った解答を出していきますが、何らかのパラメータを変化させることで解答を正解に近づけるように学習します。教師データは用意せず入力データのみを学習器に投入します。入力データ間の距離や類似度、統計的な性質に基づいてクラスを生成(クラスタリング)することが主な目的になります。教師あり学習は教師データを揃えるのが大変です。半教師あり学習では、教師データがある入力データと、教師データがない入力データの両方を用いて学習します。強化学習なんらかの評価の基準により報酬を与え、その報酬を増やしていくように学習します。一連の行動の最後に評価が与えられるような場合に用いる学習方法です。強化学習は教師あり学習・教師なし学習両方の特徴をあわせ持つ中間的な学習方法とも考えられます。決定した正解を持たない(教師なし学習)、かつ報酬がある(正解を与えている、というのは教師あり学習と同じ手法)からです。強化学習はゲームの勝敗を通じて戦略知識を獲得するなどに利用できます。機械学習アルゴリズムの分類では、実際に機械学習をする際にどのようなアルゴリズムを選択すれば良いのでしょうか?scikit-learnのマップによると、機械学習のアルゴリズムは4つに分類できます。(Classification)入力したデータに対してデータの属性や種類を返す手法です。予測対象はカテゴリです。(Regression)入力したデータに対して値を出力する手法です。(Clustering)投入したデータのグルーピング結果を返す手法です。Reduction)多変数のデータを要約する手法です。低次元のデータに変換します。特徴量が多くなればなるほど調整すべきパラメータの数が増えて、過学習のリスクが高まります。過学習のリスクとは、学習を重ねて訓練データに特化しすぎることで、かえって未知のデータに対する汎化性を失ってしまうことです。データをまだ正しく掴み取れていない状態を未学習と言います。過学習と未学習はトレードオフの関係になることに注意しましょう。ここまで機械学習の手法・分類を紹介してきました。利用割合イメージは以下のとおりです。カッコ内は代表的なアルゴリズムになります。深層学習のアルゴリズムお気づきかもしれませんが、ここまでで深層学習に関することが出てきてません。深層学習にも色々な種類があります。ここでは主なものを5つ紹介します。畳込みニューラルネットワーク畳込み層とプーリング層を含む順伝播型ネットワークで、もっぱら画像認識に利用されます。再帰型ニューラルネットワーク音声や言語、動画像といった系列データは、系列内の要素の並び(文脈)に関連性があります。した系列データを扱うニューラルネットです。自動符号化器データをよく表す特徴を獲得することを目標とするニューラルネットです。深層学習の事前学習で重みの初期値をとることなどに利用されます。深層ボルツマンマシンユニット間結合が双方向性を持つニューラルネットです。ネットワークの挙動を確率的に記述できるので、データの生成モデルとして利用されます。深層強化学習Googleの子会社Deepmindが開発した、深層学習と強化学習を組み合わせたアルゴリズム。囲碁AIのAlphaGoは、自分の選択した手に対して、有利になったか不利になったかを定量的な報酬として与え、増やすように学習しているはずです。他にも分類の仕方があります。ここでは、機械学習の手法では教師あり学習がよく使われていること、手法に対して代表的なアルゴリズムがどのように当てはまるかが伝わればと考えています。簡単なプログラムで機械学習の基本的な仕組みを整理してみましょう。World」と呼ばれるmnistは、githubにソースコードがあります。mnistは下記のような0から9の手書き数字画像データセットです。その画像が数字の何を表すかというラベルデータも含んでいます。mnist_softmax.py結果として下記が表示されます。0.9167この数値は何を表しているのでしょうか?実際にソースコードを見てみましょう。mnist.test.labels}))とてもシンプルなMNIST分類器の例とコメントされてます。短いコードですが、重要な事が沢山詰まっていますので整理してみましょう。処理の大まかな流れコード内で学習処理と判定処理をしており、機械学習の一般的な処理と同じです。全体的な処理の流れは下記のようになります。ポイント処理段階ごとのポイントをおさえましょう。数式や関数、ニューラルネットの説明をかなり省略しています。段階的に詳しく説明できればと考えています。データ準備mnistのデータ管理用の別ファイルinput_data.pyを利用しています。このファイルはデータが3つに区分されダウンロードされます。trainvalidationtest機械学習では訓練と試験でデータを分けることが重要です。モデル作成時に利用した訓練データで試験(評価)するのでは、汎用的な計測精度とは言えません。そのためtrainとtestの2つのデータが準備されています。今回のサンプルコードでは利用していませんが、パラメータをさらに調整するためのデータになります。モデル作成このサンプルコードで作成する数理モデルは下記。ノードとエッジの内積の組合せの和に、バイアスを足したものをSoftmax関数の引数にしています。順伝播ネットワークです。b:バイアス組合せは、下記参照softmax関数の戻り値、ここではyは、0.87666・・などの確率の値となります。してクロスエントロピーを利用しています。最適化手法は勾配降下アルゴリズム、サンプル内の0.5は学習係数になります。多クラス分類の場合はクロスエントロピー関数がよく使われ、回帰問題は二乗誤差関数が使われます。順伝播ネットワークの学習とは、学習データで計算される誤差関数を、ネットワークのパラメータについて最小化することです。学習の目的も、選んだ誤差関数(=損失関数)を最小にするネットワークのパラメータを求めることと言えます。極小解は何らかの値を出発点に、パラメータを反復計算することで求めます。この反復計算方法として、(非線形関数の最小化手法で)もっとも単純な方法が勾配降下法になります。勾配降下法は、ネットワークのパラメータを負の勾配(ベクトル)方向に少しずつ動かし、更新していきます。この際の更新量の大きさを定める定数が学習係数(学習率)になります。今回のサンプルコードはミニバッチ学習で、100のランダムなデータを取得しています。この数値(100)はバッチサイズです。機械学習での学習データの与え方は3パターンに分けられます。全ての学習サンプルを用いて更新量を求める方法です。学習サンプルの誤差は、クロスエントロピー関数や二乗誤差関数を用います。オンライン学習(逐次学習)1つのサンプルでネットワークを更新した後、次のサンプルを更新されたネットワークで評価する、学習サンプルを1つずつ与える方法です。学習セットを少量のサブセットに分け、1回の更新にそのサブセットを用いる、バッチ学習とオンライン学習の中間的な方法です。計算を並列化して、数値計算を効率化します。正解データと比較して、精度を算出。学習モデルを評価しています。この評価結果を指標にしてモデルやデータを変更・改善していきます。おわりに機械学習を利用したシステムは今後ますます身近なものとなってくるはずです。深層学習も機械学習の一種。機械学習の必要性や仕組みのイメージが湧けば、深層学習の理解もスムーズになるかと思います。話変わりますが、最近オフィスを増設しました。ここ、イベントスペースがあるのです。このピカピカのスペースを使わずにはいられず・・・勉強会します。Learningの理解や開発が、今より少しでも進む場になれれば嬉しいです。懇親会20時以降会場ビルに入れません。遅れてくる方は注意して下さい。Inc.お知らせぐるなびでは一緒に働く仲間を募集しています。かわしま深層学習がメインのフルスタックエンジニア。週末は子供の頃より続けている剣道でリフレッシュしてます。美味しいお店探しも好きで、妻とよく食べ歩きをします。google.setOnLoadCallback(initialize);スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。