読者です 読者をやめる 読者になる 読者になる

おいしいとこはすこしだけ

文系出身SE見習いの備忘録。

Deep Learningチュートリアル講座に行ってきました

こんにちは。文系出身SE見習いの北白川キリコです。

 

今日はDeep Learningの勉強会というか、講義というか、そういうのに参加させていただいてきました。

365e5afb367e0244f53d0d3c8f.doorkeeper.jp

これね。

 

大体3部構成で、

  1. 理論編:機械学習の基礎、というかニューラルネットワークの基礎。主にパーセプトロンについて
  2. 実践編:実際にTensorFlowでニューラルネットワーク(多層パーセプトロン)を実装してみよう
  3. 発展編:Deep Learningって多層パーセプトロンと何が違うの? どんなニューラルネットワークモデルがあるの? など

みたいな感じだったと思います。

 

数学できないからやばいかなーと思ったけどΣが何だったかさえ思い出せればなんとかなりました。

 

以下、ノートから抜粋。

 

理論編:ニューラルネットワークパーセプトロン

  • 機械学習における学習とは、与えられたデータを元に望ましい出力が得られるようにモデル(法則性)を改変していくこと
  • Deep Learningにおける学習モデルがニューラルネットワークといわれるもの
  • ニューラルネットワークは人間の脳を再現しようとするもの。脳の最小単位である神経細胞を再現するモデルがパーセプトロン
  • 複数の入力から単一の出力=順伝播
  • 入力データが入ってくると、内部状態として情報が溜まる。その内部状態に活性化関数を適用して出力するという流れ
  • 入力データには重みづけがなされるので内部状態を経て出力にどの程度反映されるか変わってくる。この重みづけを色々変えていくことで正しい結果を得られるようにするのがパーセプトロンにおける学習
  • パーセプトロンの学習則とは、教師データと実際の出力データを古い重みに与えることで新しい重みに更新していくというもの
  • 更新に使う差分には学習係数をかける。この学習係数の大きさは精度にかなりかかわってくる
  • 線形分離可能な問題はパーセプトロンで解けるが、非線形だと無理
  • 非線形とかの難しい問題を解くには多層パーセプトロンが必要
  • 入力層―中間層(隠れ層)―出力層という層に分かれる。層と層は全結合
  • 多層パーセプトロンの学習には損失関数(=教師データと実際の出力データがどれくらい違うかを表す関数)を使う。損失関数の最小化問題。勾配降下法を使う
  • 出力層の勾配は計算できるので、誤差を入力層にむけて遡らせることで中間層の重みづけを決定できる
  • 全訓練データで学習すると局所解に陥ることがあるのでミニバッチに小分けにしてそれぞれで学習させる方法をとることが多い(確率的勾配降下法
  • 学習係数や重みの初期値によっても局所解に陥るかどうか変わってくる

 

実践編:とりあえずTensorFlowのチュートリアルを触ってみる

  • VirtualBoxUbuntuを入れてTensorFlowを動かしてみようみたいなやつ
  • TensorFlowではプレースホルダ―が入力層とか出力層になる
  • MNIST For ML Begginersを試してみる。中間層がないニューラルネットワークだけど91%ぐらいの正答率ですごい
  • 中間層が100、中間層の活性化関数がReLUのニューラルネットワークを作ってみたりした。初期値が大事
  • とにかくニューラルネットワークはいろんなモデルを試してみることが大事なんだけど決めるべきパラメータが多すぎ!!
  • そんなときはTensorFlowのTensorBoardを使ってみよう!パラメータのログをとって可視化してくれるよ!
  • 研究者や開発者にやさしいライブラリ、それがTensorFlow!

 

発展編:いろいろなニューラルネットワークがあるぞ

  • Deep Learningにするにはめっちゃ中間層を増やしまくればいいのでは? と思ってしまうが事はそう簡単ではない
  • まず過学習の問題があるがこれはデータ量の充実とかドロップアウトとかである程度回避できる
  • 中間層が多すぎると誤差がちゃんと次の層(逆伝播なので正しくは前の層)に伝わらずわやくちゃになる問題(=勾配消失問題)は2006年まで未解決
  • しかしHinton教授が事前学習(pretraining)で解決できると発見!
  • Hinton教授は偉い人なので覚えて帰ること
  • pretrainingとは、重みづけの学習前の初期値を適切に設定すること。これがランダムなので勾配消失問題が起こっていた
  • pretrainingの手法のうち、Autoencoder(AE/自己符号化器)は入力データだけで教師なし学習を行う。入力に対する出力結果が入力データ自身となるように重みづけをする
  • 深い構造で学習させたいときは、一層ずつautoencoderで学習して重みづけの初期値を決定し、層を重ねていく(Stacked Autoencoder/積層自己符号化器)
  • AutoEncoderの重みを可視化すると特徴量らしきものを獲得できる! これがすごい!
  • Sparse Encoderという言葉が出てきた。できるだけ重みは0にするようにという制約のようなもの
  • 2012年ごろ、一般物体認識でDeep Learningが圧倒的な正答率を叩き出し(80%超え。今は90%超えで人間以上)、それ以降Deep Learning研究は大盛り上がり
  • 用途に応じて色々なニューラルネットワークがあるが、今一番有名なのはCNN(Convolutional Neural Network/畳み込みニューラルネットワーク
  • CNNの話はよくわからなかった…畳み込み層とプーリング層っていうのを繰り返したあとに普通のニューラルネットワークと同じ全結合した層につなげるらしい。pretraining要らない
  • 毎日論文が出てるので海外の論文をいっぱい読もう
  • ハイパーパラメータ問題(パラメータ多すぎ複雑すぎ問題)はなかなか解決されてないぞ
  • とりあえず青本を読もう

 

講師の方々が順序立てて話してくださったので、すごく分かりやすかったです。

まあこのメモは分かりにくいですけど……まずは覚え書きとして。