ニューラルネットワークを学ぶ

Deep Learning(深層学習)に用いられるニューラルネットワークについてのまとめ

  1. 脳の仕組み
  2. ニューラルネットワークの仕組み
    • 3層パーセプトロンとは何か
  3. ニューロンの仕組み
  4. Deep Learningでどう使うのか

脳の仕組み

脳は10%の神経細胞と90%のグリア細胞で構成されている。
グリア細胞は神経細胞を補助する役目であり、主役は神経細胞である。
神経細胞は電気信号によって情報のやりとりを行う。
神経細胞のことをニューロンと呼び、ニューロンのつなぎ目をシナプスと呼ぶ。

ニューラルネットワークの仕組み

脳の仕組みをコンピュータに再現しようとしたものがニューラルネットワークである。
いくつかニューラルネットワークの形があるが、3層パーセプトロンが有名である。

3層パーセプトロンとは何か

ニューロンの役割を果たすノードを種類ごとに分類し、同じ種類のノード同士では情報のやりとりを行わない。
ノードの種類は「入力層」「隠れ層(中間層)」「出力層」の3つに分類される。
隠れ層は複数種類のノード群から構成され、このノード群をユニットと呼ぶ。

ユニットを増やすことでより複雑な事が判別できるようになり
ユニット内のノードを増やすことで1つのことをより正確に判別できるようになる。

neuralnetwork

ニューロンの仕組み

ニューロンの集合体は複雑な処理を行うが、ニューロン単体の仕組みはシンプルである。
ニューロンに対しての入力が6つ(X1~X6)あるとした場合、それぞれの入力に対して重み(W1~W6)が設定されている。
入力の信号は0か1かで判断され、1の場合は重み分の数が加減算される。
最終的な重みの和が閾値を上回った場合はニューロンが「発火」し、次のニューロンに情報が伝達される。

W1(重み) × X1(入力) + W2 × X2 + … + W6 × X6 > 閾値 ?
(-1)×0+3×1+2×0+(-1)×1+1×1+(-2)×0 > 1 ?
3 > 1 ? →発火

閾値の符号を反転し左辺に統合することで右辺が0となり、下記の式で表すことができる。
この符号を反転した閾値は「バイアス」と呼ばれる。
formulaW1(重み) × X1(入力) + W2 × X2 + … + W6 × X6 + b(バイアス) > 0 ?
(-1)×0+3×1+2×0+(-1)×1+1×1+(-2)×0 -1 > 0 ?
2 > 0 ? →発火
neuron

Deep Learningでどう使うのか

ニューロンの仕組みのW(重み)とb(バイアス)を調整することで学習が進む。
膨大な数のニューロン(ノード)が存在するため、大量のデータによって学習を重ねる必要がある。
Wとbを調整するだけであることから、入力と出力の因果関係は得られなくなる。

人工知能を体系的に学ぶ

第3次人工知能ブームということでお勉強のまとめ
※認識の違いがあれば教えてください

  1. 人工知能(AI)とは何か
  2. 機械学習と深層学習の違い
    • Machine Learning(機械学習)とは何か
    • Deep Learning(深層学習)とは何か
  3. どう使い分けるか

人工知能(AI)とは何か

知的な行動を再現する技術の集合体を人工知能と呼び、その考え方が広義の意味の人工知能である。
ある特定の分野において人と同等かそれ以上の行動が再現できているように見えれば人工知能と呼ぶことができる。
コンピュータとソフトウェアで人工知能を実現する。

基本は チューリングテスト の考え方だが

人間の判定者が、一人の(別の)人間と一機の機械に対して通常の言語での会話を行う。
判定者が、機械と人間との確実な区別ができなかった場合、この機械はテストに合格したことになる。

犬や猫など言語を使用しなくとも知能を持っている場合もあるため、人の知能に留まらず「知的な行動をしているように見える」ことがポイントとなる。

機械学習と深層学習の違い

「人工知能」を実現するためには様々な方法がある。
第3次人工知能ブームでは「Machine Learning(機械学習)」や「Deep Learning(深層学習)」が注目を浴びている。
Deep LearningはMachine Learningの手法の1つである。

Machine Learning(機械学習)とは何か

与えられたデータを元に学習し、自律的に法則やルールを見つけ出す手法やプログラムである。
Machine Learningには統計的な手法やニューラルネットワークの仕組みを応用した方法がある。
machinelearningalgorithms
Machine Learning Mastery

統計的な手法では人が学習する内容を予め定義する必要があり、学習の方向性をコントロールすることができる。

Deep Learning(深層学習)とは何か

Machine Learningの手法の1つで生物の神経系を模したニューラルネットワークの構造を応用したものである。
認識や認知など感覚に関する学習を得意とする。
layers

学習する内容をニューラルネットワーク自身が見出し動作する。
学習の方向性をコントロールできず、どう学習したかの因果関係がわからないためブラックボックス化するデメリットがある。

どう使い分けるか

Deep LearningはMachine Learningの一部であるため、Machine Learningの手法の中から目的にあった手法を選択する必要がある。
解決したい問題が明確な場合は統計的な手法を採用し、解決したい問題が曖昧で複雑な場合はニューラルネットワーク的な手法を用いる。

SFで思い描きがちな「万能型人工知能」の実現は程遠く、現実的には目的に合わせた人工知能を目指し、その人工知能を組み合わせることで統合的な人工知能が実現できると考えている。

NginxでデフォルトのVirtualHostを設定する

NginxではリクエストのHostヘッダとserver_nameが一致しなかった場合、一番最初に読み込まれたVirtualHostの設定が適用される。
default_serverを記述することでデフォルトのVirtualHostを設定することができる。

ELBのヘルスチェックはデフォルトのVirtualHostに対してリクエストが行われる。
デフォルトのVirtualHostをそのままサービスに使用すると下記現象が発生する。
・サービスのアクセスログとELBヘルスチェックのアクセスログが混ざる
・IP制限やBasic認証を行うとELBからも見られなくなる →OutOfServiceになる
・設定ファイルが複雑になる

「デフォルトのVirtualHostとサービスのVirtualHostを分ける」ことで解決する。

[1]デフォルト用のVirtualHostを作成する
(1)設定ファイルを作る
/etc/nginx/conf.d/000-default.conf

server {
    listen 80 default_server;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

(2)ファイルを作成する

echo "index" > /usr/share/nginx/html/index.html

[2]サービス用のVirtualHostを作成する
(1)設定ファイルを作る
/etc/nginx/conf.d/001-domain.com.conf

server {
    listen       80;
    server_name  www.domain.com;
    server_name  domain.com;
...