moxt

Just another Blog site

ディープラーニングが気になる

      2015/07/03

ダラダラとメモ。

スライド・ブログ

  • http://www.slideshare.net/kazoo04/deep-learning-15097274
  • http://www.slideshare.net/nlab_utokyo/deep-learning-40959442
  • http://qiita.com/icoxfog417/items/65e800c3a2094457c3a0
  • http://blog.jubat.us/2012/08/blog-post_27.html

    • 特徴抽出とは

論文

* http://cs.stanford.edu/people/karpathy/deepvideo/deepvideo_cvpr2014.pdf

OSS

  • http://caffe.berkeleyvision.org/

インストール

  • http://masabloggers.blogspot.jp/2014/10/deeplearningframework-caffe-install.html
    * http://reiji1020.hatenablog.com/entry/2014/11/27/175140

メモ

ディープラーニングはニューラルネットを何層も重ねたもの。
ニューラルネットワークは単純パーセプトロンを組み合わせたもの。
単純パーセプトロンは人間のニューロンを模した分類器。
生情報→前処理→特徴抽出→分類(?)
次元圧縮法
* 主成分分析

  • データセットとは
    • 学習する対象…かな
    • ネコの種類を識別する、とかなら画像と品種(ロシアンブルーとか)を対応付けた大量データのことをデータセットと呼ぶのだろうか。
    • cat.jpg => 23(ロシアンブルー) 的な?
    • 独自のデータセットを用意するの大変そうだなあ。。
  • リファレンスモデルとは
    • ディープラーニングはニューラルネットを複数組み合わせた複合体で、各々にパラメータが存在してる。通常そのパラメータを弄って良いパフォーマンスを出す。リファレンスモデルはそのチューニングが予め行われているディープラーニング(の構成)。

CaffeはILSVRC2012データセットで学習済みのリファレンスモデルを配布しているので、それを使ってすぐに分類を実行することができます。

よく分からないが、ベンチマーク的な存在だとおもう。
このベンチマークより、X%精度が向上したよ。『オーッ』って。やるための踏み台。

機械学習と情報の次元との関係

機械学習って何?

よく分からない。
複雑な現象を抽象化することで法則性を見出したり、モノ同士の類似具合を計算したり、いろいろやれる気がする。

生情報はそのままでは使えない

http://qiita.com/IshitaTakeshi/items/4607d9f729babd273960

基本的には情報をベクトル化して、そのベクトル間の距離を測る
距離が近ければ、その情報は似てるor同じとみなせるし、離れていれば違うものとみなせる。
画像などを素直にベクトル化すると次元数が数千以上になる。
この大きなベクトルを比較するのは高い計算量となる。また、良い結果も望めない。
なので、比較する上で有用な情報を残しつつベクトルの次元を削減することが求められる。

上のQiitaの例ではリンゴとブドウの比較例を挙げており、対象の色に着目することでベクトルの次元を大きく削減している。
『青色の濃度』と『赤色の濃度』だけに注目すればよくなっている。
この過程を『特徴抽出』という。

脳の一次視覚野の研究

http://enterprisezine.jp/article/detail/6471?p=3

見たものを処理するとき2つのニューロンが発火している

  • 単純性細胞
    • 特定傾きを持つ線分やエッジに反応する
  • 複雑性細胞
    • 単純性細胞のとりまとめを行う

ディープラーニングにも学習は必要

2種類の学習法

  • 教師あり学習

単純パーセプトロンであれば「勾配法」とよばれる学習方法で重みを調整することができる。
単純パーセプトロンの複雑な組み合わせであるニューラルネットワーク、しかも複数の層からなっている場合は中間層で正解と比較する必要があるが、正解がない段階で中間層と比較することはできない。

そこで、勾配法を拡張した「誤差逆伝播法」という手法で学習を行う。

出力層から得られた誤差を前の層にもどして、その誤差に対して中間層がどれだけ寄与しているか計算して中間層のパラメータを調整するというもの。

ニューラルネットワークの層数が多くなったり、ユニット同士の結合が複雑になると学習が困難になるという問題がある。

  • 教師なし学習

オートエンコーダ

出力が入力をできるだけ再現できるように重みを調整することで、効率よくデータの次元圧縮を行えるようなニューラルネットワークを学習するための仕組みです。

オートエンコーダによって元情報の情報量を保ちつつ次元圧縮を行う。この圧縮結果が各層の特徴となる

畳み込みニューラルネットワーク

http://vaaaaaanquish.hatenablog.com/entry/2015/01/26/060622

すげー良い記事です。

起源

パーセプトロン→ニューラルネット→多層ニューラルネットと順調に肥大化した構造物
様々なパーセプトロンを沢山組み合わせることで、対象の関数(らしきもの)い近似させていこう、という試み。

多層ニューラルネットは多くの計算リソースを使う。
これは現代まで続くハードウェアの進化によって克服されてきてる。

多層ニューラルネットの各パーセプトロンの重みを更新し、誤差を最小化することを目指すが中間層たちは誤差を知ることもできなかった。これは上記にかいた『誤差逆伝播法』によって対処できる。出力の誤差を入力層に向かって伝播させることで再学習を行う狙いだ。
しかし、出力層付近のパーセプトロンの再学習はできるが入力層に近づくにつれ誤差が減衰してしまうためほとんど再学習されない問題がおきた。

これを克服するために考案された1つの手法が『畳み込みニューラルネットワーク』とよばれるもの。

手法を理解する

 - プログラミング

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

  関連記事

logo_og
ReduxのMiddlewareについて理解したいマン

ReduxのMiddlewareの仕組みがよく分からない。 具体的な処理過程を追いかけて理解に至るまでのメモ。 …

no image
SwiftでOSのバージョンが8.0.0以下とそれより大きいヤツで処理を分岐させたい

前置き push通知のデバイストークン取得方法がiOS8から変わりました。 …

no image
iOSアプリの設計ってどうやるの?

ViewControllerに処理を詰め込みすぎて保守が大変になるのはあるあるネタですよね。 じゃあ、ViewControllerでやることってなんだろうって問われると、まあ、こんなんだろうなってフワッとしてる。 …

no image
gitであまり使わないけど知らないと困るコマンド一覧

随時追加 originのURLを変更したい …

no image
GrowthPushのAndroid-SDK(?)のコードを読んでみる

できること、できないことを知るために。 GrowthPush.java …

no image
アプリ起動時に呼び出すStoryboardを指定したい

google-fu不足でどこにも載ってなかったのでメモ。 プロジェクト内のInfo.plistで設定できます。 …

logo_og
ReactなComponent同士を連携させたい

実践的なサンプルに塗れてなんとなく使ってると破綻する。 分かってること、分かってないことを整理しておきたい。 …

large_v
MacでDockerした感想文

Contents1 前提:DockerはLinux上でしか動かない1.1 …

no image
Androidアプリを作るために最低限必要な知識と未知の部分を列挙

作りたいアプリによって必要な知識は変わるかもしれないが。。 個人的過ぎて役に立たないが、整理がてら羅列してみる。 …

no image
フロントエンド開発のメモ

最近のフロントエンド開発ではビルドランナーを使うのが常識になってきてるみたいなので。 jspm的なもっと進んだやり方でも良いんだけど、pluginが少ない、文献が少ない、自身の技術力不足、ということでビルドランナーなやり方でやる。 …