Learning周りの知識〜2017年11月20日2019年11月18日kobayashishunsukeTweetこんにちは、小林です。AI周辺の知識が全くなかった為、調べました。調べて勉強した結果、ほんの少しだけ理解出来ました。全て出来るだけ簡潔にまとめています(間違っていたらすみません&あまり深く書いてないのでその点ご了承ください)。図でまとめてみたAIなどそれに関係する言葉は聞いたことがあるが、その意味や中身を理解していなかった...為、大まかに図にまとめてみました。Intelligence)です。それの中になんとなく聞いたことがある言葉がAIの中に詰め込まれている...(後ほど説明)。Trendsを使用し、検索数を調べてみました。Learningで検索をかけてみました。スコアの100(Max):調査対象のキーワードが最もよく検索されている時点のスコアということを前提に置いておきます。Learningでした。これらは正式な名前でかけているので国や地域で検索順位に変動が出ると思います(日本語で”マシーンラーニング”のように検索する人もいるから)。AIを入れるとこんな感じです。Intelligence以外の意味で検索している人もいるだろうが)。これだけだと検索実数も見えない上に凄さがよく分からないので、ついでに全然関係がないですが検索数が高そうな言葉も入れてみました。具体的には言いませんが、これで値の凄さになんとなく気づいた気がします(”AI”は国名を超えてしまう検索値=注目度が高い)。ここ1年間での統計ですが、気になっている人が相変わらず多いなと感じました。これらの関係性や中身に迫っていきましょう。Intelligence)とはよくAIが〜などの話を耳にしますが、そもそもAIって何となく理解してるけど具体的に何?と思っている人は少なくないと思います。色んな意味がありますが、一言で言うと”人工知能”というやつですね。部分的にはここ(赤い部分)↓とりあえず広義な言葉と覚えておきます(ガチガチに定義付けをされていないみたいなので)。そもそも約1950年頃から人工知能の歴史があるようですね。Learningのような)を人工知能と呼び、その考え方が広義の意味で人工知能(語弊があったらすみません)。Intelligence)の2つと言われていますね。Intelligence):SF映画やフィクション物語に出てくるような人間と全く同じように思考し、人間と同じ様に判断することの出来る。狭いAIのような感じですね。多くの論文や記事で強いAIや弱いAI等の表現で書かれていることが多いです。上を見ればわかりますが、主に現在使用されているものが特化型人工知能です(弱いAI)。我々の身に迫っているものが汎用型人工知能(強いAI)です。AIに関してふんわり理解したところで更に中身を掘り下げていきます。与えられた情報を元に学習する↓それを元に自律的に法則やルールを見つけ出す手法やプログラムのような感じですね。部分的にはここ↓MLは主に4つのアルゴリズムに分類出来ます。Learning)教師有り学習とは一言で言うと、”正解を教える”学習方法です。こんな羅列した画像があるとします。これらの文字を下図のように、文字1つ1つにラベル(これは〜です等)をつけていきます。このラベルを人間がつけることによって機械は学習する、といった流れです(人間側がかなり労力を使う)。回帰や分類という概念を持っています。以下簡易的な説明です。分類:データを入力すると、出力としてデータの属性や種類を返す方法(ラベリング)回帰:データを入力すると、出力として数値を返す方法(予測)それぞれ図にしてみました。過去の入力数値を元に、新たに与えられたデータをグループに仕分けする概念。過去の入力数値から未来の数値を予測する概念(簡単に言うと”数値予測”)。Learning)これは教師有り学習の逆で、”正解を教えない(人間がラベルをつけない)”学習方法です。以下2つの概念を持っています。クラスタリングデータを入力するとそのデータのグルーピング結果を返す方法。外れ値検出(異常値検索)データから著しく外れたデータを異常値として検出する方法。膨大なデータから自動的に算出した特徴量から法則等を導き機械に学習させる方法です。ここで先ほどの教師あり学習の図と比べてみましょう上図のような羅列した文字に関してこのように答えを与えないのが教師無し学習です。機械がデータのパターンだけを見てデータの類似点を探らなくてはなりません。learning)こちらはペアのデータ(ラベル付き)に加えて、予測対象が存在しない予測材料のみのデータ(ラベル無し)からも学習を行うことで、予測モデルの精度を向上させる手法です。簡単に言うと、ラベルが付いたデータと付いていないデータを両方を使用する学習法ですね。半分だけにラベルをつけて残りはラベルなしで学習させる↓これをすることにより、人間による費用や労力を減すことができるといった作業結果ではなく過程において大きなメリットがあります。Learning)簡単に説明すると、それが正解か不正解か人間でもわからない↓その為最終的な効果が最大化するように行動を学習するのような感じです。正解ではなく報酬を与える=最初は賢くないが報酬を与えるごとに賢くなります(その為たくさんのシュミレーションが行われる)。与えられた正解の出力をそのまま学習すれば良いわけではなく、もっと広い意味での「価値」を最大化する行動を学習しなければならない、といった役割を持ちます。株の長期保有のように、長期的に見て最終的にメリットが得ることを目的とした学習法です(長期的にみて全てがうまくいくとは限らないが)。全ての学習方法で読み込ませるデータが異なる=学習方法に違いがあり、適用できるシーンも変わってきます。これから説明するDLも同じように感じますが用途がはっきり分かれる為、どのシーンにおいてどの学習方法を選択するかが重要だと思います。NNの概要ニューラルネットワークとは、計算アルゴリズムのことです。いう3層にニューロンというものを置きます。この3層を多層パーセプトロンと呼びます(単層パーセントプロンは2層のみの構造)。算出し、それを使って分類していく流れですね。これらのプロセスで得た学習データの特徴を数値化します。部分的にはここ↓まずニューロンとNNの関係性を図に表してみました。ニューロン(neuron)とシナプス(synapse)って何?って初めに感じたので、簡単に解説を入れておきます。最近はコンピュータ上のプログラムで作り、細胞の接続等の設定を自由に変えられるようになった(そしてそれを多層に接続して精度を上げたものがDL)のように、確実に人間に近づいているなと感じます。以上のNNの特徴をまとめると、これらの各層は複数のニューロン=ノードがシナプス=エッジで結ばれる構造です。出力層の3つに分類されます。隠れ層は複数種類のノード群から構成され、このノード群をユニット(よく見る層みたいな塊)と呼びます。このメリットとしては、ユニットを増やすことでより複雑な事が判別できるようになる↓ユニット内のノードを増やすことで1つのことをより正確に判別できるようになる。ニューロンが理解できたところで、NNをとりあえず画像で表してみました。次はアルゴリズムについて一部説明していきます。NNの主なアルゴリズム後ほど説明するDLの基盤となる主な2つを説明します。Networks)これは畳み込み層(フィルタリングをして特徴量を取り出す層)とプーリング層(フィルタの結果から選択する層)を交互に繰り返すことでデータの特徴を抽出し、最後に全結合層で認識を行う手法です(後ほど画像でわかりやすく説明)。上記はConvNetとも呼ばれています。簡単に言うと、画像を複数のカテゴリに分類するよう学習をします。ここで一例を図にしました。このように細かくカテゴリに分類していき結果を割り出すのですが、上図の説明をするとCNNにおけるレイヤーの種類は以下の4つがあります。↓プーリングが繰り返される流れです。Networks)中間層において、中間層の結果を自ら再度入力に用いることで、文脈理解を可能にする手法をCNNと呼びます。中間層にループをもたせ1個前のデータを判断材料に使うことができる(入力データの記憶を保持させるため)メリットを持ちます。ここで中間層同士で入力し合う画像を作ってみました。左側が大まかな図で左側が中間層にループをもたせ1個前のデータを判断材料として次のニューロンへ伝搬している図です。これは後ほど説明するDLのアルゴリズムにも大きく関わっています。Learningについて説明していきたいと思います(以下DL)。Network(教師有り学習)の階層を深めたアルゴリズムです。十分なデータ量があれば、人間の力なしに機械が自動的にデータから特徴を抽出してくれます。最初に説明した強いAIに最も近い存在の1つとされています。部分的にはここ↓とりあえず図に表してみました。layer)は複数の層を持つことができ、特に深い隠れ層を持つものがDLと呼ばれています(中間層が2層以上になっている多層構造のNNをMLさせたものがDL)。layer)が異なりますね。予測精度を向上が可能となりました。従って、層やニューロンを増やすと分類能力が上がることが理解できますね。Learningって何が具体的に凄いのか、まとめてみました。従来の機械学習のアルゴリズム:人間の手でデータか特徴量の抽出を行わなければいけなかった↓DLでは特徴量の自動獲得出来るようになった(=機械が自動でデータにどのような特徴があるのか取得し学習)特微量が大きなポイントですね(後ほど説明)。DLの特徴として、データの量が多ければ多いほど精度は上がります。識別結果のチューニング(調べる)が難しいという弱点あります。大量のデータさえあれば、従来の機械学習などでは不可能だった複雑な扱いづらいデータも処理を行うことが可能になった点が大きな変化と感じます。事前学習(pre-training)とはこれは名の通り事前に学習をします。事前学習はアルゴリズムでもあるが、他のアルゴリズムと下記2つの違いは根底の計算をするということです(初期値を獲得するために)。入力自体が教師データとなる為、DLにとってなくてはならない必要な要素です。積層オートエンコーダの二種類に分類されます。どちらも情報圧縮を行う事ができるNNですが、学習の過程が大きな違いです。上記2つを簡単に説明するしていきます。これはシンプルな2層のニューラルネットで、最初の層は入力層、2つ目の層は隠れ層となります。Encoder)はNNの一種で、情報量を小さくした特徴表現を獲得するために出力を入力に近づけるよう学習するNNです。Encoder)と呼ばれていますね。中間層を入力層とし、更にもう1層積み上げる↓これを繰り返すといった流れです。Learningを理解する上でダントツに重要度が高いワードなので、とりあえず例を挙げてみます。仕入れる服のテイストなどなど、ざっとですが要素が沢山あります。これらの結果(=売上数)に影響を与えそうな要素を”特徴量”といいます。Learningでは勝手に生成してくれます。DLの主なアルゴリズムここで一部ですがアルゴリズムを簡単に説明します。data)に対するモデル、あるいは構造(architecture)の1種で、RNNを実現するために考案されています。こちらRNNとの比較画像です。RNNの持つ勾配消失問題を解決することで長期の時系列(保持具合を調整、又は忘れる)を学習可能としました。上記画像でいうとLSTMが中間層においてRNNより1つニューロンが多い構造になっています。このニューロンが保持と時々忘れるといった役割を保っています(かなりざっくりですが)。Goodfellowが考案したモデルとなります。一方でディスクリミネイターはレプリカか本物なのかを識別する役割を持つ↓レプリカを作る方は本物と近づけようとし、対して識別する方は確実に見分けられるよう互いに競い合うのような感じですね。次回のブログで以上について実装してみたいなと思います。活性化関数とは入力信号の総和がどのように活性化するかを決定する役割を持ちます。これは、次の層に渡す値を整えるような役割を持ちます。Labellioでテストなんか動かしてみないと実感沸かないので、今回はLabellioを使用しDLを体験しました(画像専門ですが)。概要Labellioとは、画像認識モデルを高速に作成(モデル数によりけり)出来るツールです。私のような初心者でも気軽に操作できます。学習アルゴリズムに与えるデータの準備の2つを用意するのはかなり手間がかかるでは...と思いました。Labellioを使用する際はその用意が必要がない為、誰でも簡単にDL体験が出来ます。Labellioが自動生成する画像認識モデルは、Caffeを組み込んだ画像認識アプリケーションで利用可能(今後いじってみたい)のようですね。ちなみに2017年10月30日から有料プラン提供開始したみたいですね。いじってみましょう(設定等の細かいことは公式のマニュアルを見れば分かるので省きます)。ズッキーニかなり分類機をいじめている気がしますが、これで試してみます。形が似ている為、色や形が少しでも変わると分類出来ないのではないか...?と疑問を抱いていますがやってみましょう。データを入れ込んだら現在の分類機の精度が大まかに確認出来ます。うーん、いまいちですね。本来lossが低くないといけないのですが、データでいじめてしまったので仕方がありません(=おそらく精度が低い)。実験なのでこのまま進めてみましょう。どこまでの精度を発揮してくれるのか、試していきます。最初はゴーヤからいきます。お、調子が良いですね。