Stimulator

機械学習とか好きな技術話とかエンジニア的な話とかを書く

Windows 10 にJuliaしてSublimeTextする

Windows 10 64bitにプログラミング言語"Julia"を導入して、Sublime Text 2の環境を整える話。
Juliaは0.4.0です。

- はじめに -

前回の記事と大体やってる事は同じです。多分Windowsの7以降くらいならこれでできると思います。


- Juliaのインストール -

Julia公式のダウンロードページ(http://julialang.org/downloads/)からWindowsインストーラを選択。PCが64bitなので64bit版。

インストーラのexeファイルをダウンロードできたら起動してインストール。

デフォルトではC:\Users\user\AppData\Local\Julia-0.4.0に入るっぽいです。
今回はとりあえず例としてC:\直下にインストールします。(C:\Julia-0.4.0\)


f:id:vaaaaaanquish:20151107033834j:plain

インストールが終了したらそのフォルダに移動して、Juliaアイコンのショートカット、または/bin/のjulia.exeを起動します。起動してJuliaロゴが表示されれば良いです。


- PATHの設定 -

Sublime Textをどうしても使いたいので、まずPATHの設定を行います。

まずはWindows 10のコントロールパネルを開きます。
コントロールパネルを見つけるのが面倒なときは、Winメニューの"すべてのアプリ"に"検索"があるのでコントロールパネルを検索すると出てきます(便利そうだったのでスタート画面にピン留めしました)。

(2015年8月だとWinメニュー出した所でキーボード押すと検索できるっぽいので不要)

あとは他の言語同様、
システムとセキュリティ > システム > (左タブ)システムの詳細設定 > 環境変数
です。

ユーザ環境変数とシステム環境変数のPATH(Path)にインストールした"C:\Julia-0.4.0\bin"を追加します。
PATHは;で区切るようになってます。
以下サンプルとして私のやつです。最後に付け足しただけです。

%PATH%;C:\Python27;C:\MinGW\bin;C:\Julia-0.4.0\bin

追加したら動作を確認するためにコマンドプロンプトを開きます。これも検索すると楽です。
コマンドプロンプトで"Julia"を入力しJuliaが起動すればハッピー。ダメそうならPATHを見直してください。


f:id:vaaaaaanquish:20151107035201j:plain


- Sublime Textの設定 -

前回の記事同様、Ctrl+bでビルドしたいので、[Tools]>[Bulid System]>[New Build System](日本語だと[ツール]>[ビルドシステム]から[ビルドシステムの追加])を選択。よしなに設定を書いて適当な名前で保存します。

{
    "cmd": ["julia", "$file"],
    "selector": "source.julia"
}

ここで1回Sublime Textを再起動して設定を読み込ませた方がいいかもしれません。


- テスト -

好きな場所にprintlnだけ書いたtest.jlみたいなファイルを作ります。

println("Hello, World!")

Ctrl+bを押して結果が帰ってこれば成功です。

f:id:vaaaaaanquish:20151107035830j:plain


- おわりに -

私はPackage Installerを導入し、いつものCtr+Shift+PでInstall Packageを選択。
"Julia"でサジェストされたものから"julia"と"JuliaCompletions"を入れました。
多分Sublime Text 2で2015年現在使えるのはこの2つっぽいです。
"julia"の方は前回の記事のJulia-sublime-packageのアレかなと思います。

なんかJuliaできて良かったです。
では、最高のJuliaライフを。

Janetterの他者紹介とRT後のツイート確認拡張プラグイン

- はじめに -

PC版Twitterクライアントで一番すきなJanetterのプラグインを公開する話

他者紹介とリツイート直後のツイートを表示するやつに飛ぶやつ


- 他者紹介 -

以前記事を書いたけど、共有方法をGithubに変更したので該当記事を削除して再掲載。

f:id:vaaaaaanquish:20140411102456j:plain

相手の名前を右クリックすれば他者紹介が簡単にできるだけ。
最早Twitterライフを送る上で(@ )を付けるのですら面倒なのである。

Githubにjsファイルを上げました:https://github.com/vaaaaanquish/introdon


- リツイート後のツイートを確認する -

@jz5がやってるWebサービスリツイート直後のツイートを表示するやつ

最近は変な巻き込みリプライも減ったし、非公式RTも伸びない限りない。
最早フォロワーですらリプライよりRT後の言及が多い。

Janetterから直接サービスに飛べればいいなと思ってこんな感じです。

f:id:vaaaaaanquish:20151006074008j:plain

query投げてるだけなので、本家サービスの仕様変更があったらまた対応すると思います。

Githubです:https://github.com/vaaaaanquish/rtnext


- おわりに -

なんか公開してるやつの紹介記事でした。

RT後を表示するやつに飛ぶやつですが、RTやFavの通知画面(ポップアップ)からはダメでした。

なんか適当にDMしたら公開してもいいよって言ってくれた@jz5さんにも感謝。

 

ホームページつくる日記

- はじめに -


vaaaaaanquish.hatenablog.com


こんな記事を書いたら, 時間も相まってはてブのホットエントリになったりした.

そしたらフォロワーやそれ以外の方からも



こんな指摘がめっちゃ飛んできて, 「このマシンだとこう見える」とか「こういう時はこうすると良いよ」とか「このサービス使うとええで」とか色々参考になるものが見えてきて, 結果三連休は作り直しばっかりやっていた.


- 面白かった -


ページを修正しつつjQueryや色んなCSSを読んでて思ったけど、Web周りってすごいセンスが必要だなと感じた. もちろんノウハウや経験も大事だけど, JavaScriptの絡ませ方が凄いコードとか, フレームワークの上手い使い方を見て「なるほどなあ」となった.

あと他の人が見る環境が多種多様すぎるって所も「グワーッ」ってなった. おそるべし.

これから

斬新でいい経験になった. iPhone, iPadWindows Phoneまで取り出して色々直したけど, センスのないガタガタの状態が続いている.

結論, bootstrapを早く抜け出したい.

なんかホームページを作った

- 7月10日(金) -

突然学部生の1人がゼミ終わりに

「ばんくしさんWebの知識あります!?」

から入って

「Webサイト作って勝負しませんか」

と言い出したのでその日にサーバとドメインを取った.

Webの知識はJavascriptを少し書いた事ある程度だったが何か始まった.

- 7月11日(土) -

Julia言語の勉強会に出てLTした.

懇親会ではJuliaの話も機械学習の話もできて良かった.

とても楽しかった.


- 7月12日(日) -

フォロワーと蕎麦を食べに言ってカラオケをして晩御飯はお酒を飲んだ.

とても楽しかった.


- 7月13日(月) -

月曜日は大学で実験のTAがある.

めちゃくちゃ大変だった.


- 7月14日(火) -

なんかPython書きたいしDjangoとかいうの使う事にした.


- 7月15日(水) -

午前から演習のTAと午後実験TAが被る最悪の日だった.

完全に厄日だった.


- 7月16日(木) -

台風が来るとの事だったのでおうちの片付けとかをした.

日曜日に仲の良いフォロワーが泊まりに来るとの事なのでトイレや風呂も掃除した.

綺麗な部屋はサイコー!


- 7月17日(金) -

研究室でゼミがあるので大学行った.

学部生のサイトを見せてもらうと既に広告が貼ってあってちょっと引いた.


- 7月18日(土) -

今、午前3時でなんかWebサイトができたので公開した.

http://vaaaaanquish.jp

PHPとかPythonDjango,bootstrapとjsとでなんか書いた.



- 今後の予定 -

何も公開してないGitとかにコンテンツが天から降ってきて欲しい.

後輩のWebサービスも許可してもらえたらいずれ紹介したい.

あと何か問題ありそうだったら言って欲しい感じのやつです.よろしくお願いします.

MacにJuliaしてSublimeTextする

OS X Yosemite 10.10.3にプログラミング言語"Julia"を導入して、Sublime Text 2の環境を整える話。

- はじめに -

Juliaは科学数値計算向けに開発されている言語です。
MatlabやR、Octave、numpy、scipyのような記述でかつ高速に処理を行えます。
http://julialang.orgにもあるように他言語に比べてとにかく早いです。めっちゃ早いです。

最近では、電脳戦の将棋AI等にも使われ、少しずつ認知度が上がってます。
私は機械学習を専攻していますが、Pythonで設計してJuliaで実験するのが日常になっています。

Juliaの構文以外で好きなところして

  • 早い > 嬉しいです
  • Juliaの中身がJuliaで書かれている > いざという時なんとかなります
  • Python連携 > Pythonのコードやライブラリを呼び出したり、Pythonからの移行が非常に楽です。

この辺が気に入って書いています。
後以下の記事とかを暇潰しに読んでいたところハマりました。


- Juliaのインストール -

参考:https://github.com/staticfloat/homebrew-julia/

Macにhomebrewをインストールしておいて

$ brew update
$ brew install gfortran
$ brew tap staticfloat/julia
$ brew install julia

起動した
f:id:vaaaaaanquish:20150519061826p:plain

- エラーと解決策 -

- brew update

brewのアップデートでエラーが出て

error: Your local changes to the following files would be overwritten by merge:
    Library/Formula/boost.rb
Please, commit your changes or stash them before you can merge.
error: Your local changes to the following files would be overwritten by merge:
    Library/Formula/boost-python.rb
    Library/Formula/gflags.rb
    Library/Formula/glog.rb
    Library/Formula/lmdb.rb
    Library/Formula/protobuf.rb
    Library/Formula/snappy.rb
    Library/Formula/szip.rb
Please, commit your changes or stash them before you can merge.
Aborting
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master

この前機械学習ライブラリのCaffeを入れた時に書き換えたのでgit mergeできないと怒られた。
強制的に上書きして解決した。

$ cd $(brew --prefix)
$ git fetch origin
$ git reset --hard origin/master

これで行けるでしょって思ったら

error: Your local changes to the following files would be overwritten by merge:
    opencv.rb
Please, commit your changes or stash them before you can merge.
Aborting
Error: Failed to update tap: homebrew/science

scienceの中身も書き換わっていたので、/usr/local/Library/Taps/のscienceのバックアップを取ってからtap

$ cd /usr/local/Library/Taps/homebrew
$ mv homebrew-science/ homebrew-science-bak/
$ brew tap homebrew/science

brew update上手くいきました。

- install gfortran

あとgfortranのインストール時にもエラーが出た

Error: No available formula for gfortran 
GNU Fortran is now provided as part of GCC, and can be installed with:
  brew install gcc

gccの中に入ってるからgccインストールすれば良いとの事。gccは以前入れていたのでスルーした。
入っていなければエラー通り

$ brew install gcc

多分大丈夫。

- Sublime Textでbulid -

Command+bでビルドしたいので、[Tools]>[Bulid System]>[New Build System](日本語だと[ツール]>[ビルドシステム]から[ビルドシステムの追加])を選択。よしなに設定を書いた。

{
    "cmd": ["julia", "$file"],
    "selector": "source.julia"
}

 

- Packageのインストール -

Package Installerが導入されているなら、いつものCommand+Shift+PでInstall Packageを選択し

を入れると吉っぽい。

(他にもIJuliaのPackageもあったけどST3にしか対応してないので入れてない)

- テスト -

1linerのHello World(Fizzbuzz)
GitHub - vaaaaanquish/Julia_1liner_helloworld_fizzbuzz: show title

println([(x==0) ? "Hello, World!" : (x%3==0) && (x%5==0) ? "FizzBuzz" : (x%3==0) ? "Fizz" : (x%5==0) ? "Buzz" : x for x in 0:20])

 

- まとめ -

問題なく動いてハッピー。
Juliaにコード規約とかそれ関連のSTPackageとかできないかなと思う日々である。

LOGICOOL Bluetooth マルチデバイス キーボード ブラック k480をつかう

タイトル通りです。誕生日にびーきゃぷ(@beepcap)さんからもらったものです。

www.amazon.co.jp

レビューみたいな感じです。
ちなみに前の前のキーボードが壊れ、研究室のゴミ箱にあったキーボードを使っていた人が書いています。

見た目です。

f:id:vaaaaaanquish:20150321233658j:plain:w400

良いです。

ちょうど横になったiPad miniiPhoneが入ります。
端末を立てる所はゴムっぽい素材なので結構安定して立ちます。

キータッチも好きです。
少しキーが小さいですが、僕は指が大きくないので十分に感じます。
打鍵は可もなく不可もなくといった感じ。すぐ慣れました。
見た目は薄い感じですが、この見た目からすると打鍵感と音が強めだと思います。

見た目に反してそこそこの重量があるので安定して活動できます。

Bluetoothも良好です。
有線と無線どちらも使えれば最高でしたが、プログラミング等特に大きな不満なく活動出来ています。

端末切り替えも良い感じです。3つの端末を切り替える事ができて、WindowsLinuxOS XAndroidiOSで試して、切り替え時のペアリングは高速で良好、cmdやctrlもあり、長時間使っていないと自動で切断もしてくれます。

色んなマシンを使うので、このキーボードから手を離さず全ての動作が出来てとても快適になりました。L字デスクの端にあるMacbookに対してすらこのキーボードを使っています。


唯一の不満はキーボードが平面すぎる事でした。調整できません。

f:id:vaaaaaanquish:20150321233741j:plain:w400

少し斜めになってるのが好きなんですよね。
でもよくデスクを見渡して見ると、目の前にKORGシンセサイザーの名器「X50」がありました。

f:id:vaaaaaanquish:20150321233720j:plain:w400

この隙間に・・・

f:id:vaaaaaanquish:20150321233710j:plain:w400

ピッタリ!!

最高の角度になりました。

今ではこれ一つで活動しています。
外出時にも良さそうで、iPadとこれだけ持って出て軽いコーディングぐらいならできるなあとか思っています。



かなり気に入ってるので記事にしました。
キー配列や端末数を考慮したハイエンドモデルが色々出たら俺は買うぞって感じでした。

ありがとうbeepcap!ありがとうLogicool


(マウスも似たようなマルチデバイスで使えるやつあると良いなあ・・・)

Deep LearningとConvolutional Neural Network

- はじめに -

前回機械学習ライブラリであるCaffeの導入記事を書いた。今回はその中に入ってるDeep Learningの一種、Convolutional Neural Network(CNN:畳み込みニューラルネットワーク)の紹介。

CNNは今話題の多層ニューラルネットDeep Learningの一種であり、画像認識等の分野に大きな成果をもたらしています。

まあCNNすごい。本当、画像認識系だと一強といった感じ。
実装経験もあるのでよしなに書いてみようという記事。


追記:2018-10-24
この記事は2014年終盤、Deep Learningに関連するネット記事も数個しかなく、各論文でもCNNに関する理解が分かれていたような時期に、大学生であった筆者が書いた記事です。概念の理解の助けになるよう残していますが、正しくない箇所も後々多く出てくるかと思います。考慮の上、お読み頂ければと思います。


- ニューラルネットとは -

Deep Learningは、脳の神経回路網を模したニューラルネットワークを多層にしたものである。
ニューラルネットワークもとい機械学習の目的は回帰や分類、次元削減等である。


f:id:vaaaaaanquish:20150125220403p:plain:h300:w400


データから読み取れる「複雑な関数」を得る事ができれば、例えば今流行りの「分類で言うとこれは人だ」とか「今あるデータの傾向から未来を予測」のような事ができる。

その仕組みは死ぬほど大雑把に言うと、"関数の足し算"である。
フーリエ変換で音をsin波の組み合わせで表現できるように、複雑な関数を複数のニューロンが持つ活性化関数を用いて表現する。


f:id:vaaaaaanquish:20150125220611p:plain:h100:w200


ニューラルネットを構成する「ニューロン(Neuron)」は、1つ1つがある関数(活性化関数)を持つ。
それぞれのニューロンが持つ活性化関数は"パラメータ"が少しずつ違い、同じ形ではない。
重みを持ったノードでニューロン同士つなぎ合わせる事で、複雑な関数を表現する事ができる。


f:id:vaaaaaanquish:20150125220632p:plain:h300:w500



- 多層ニューラルネットワーク -

ニューラルネットは、多層にする事で「表現力を上げる」事ができる。
ニューラルネットが出来る事に次元削減がある。言葉の通り問題の次元を減らす事が可能である。

以下の図のように、二次元にデータが分布していた時、そのデータの特徴を得る事が出来れば、その特徴は一次元の分布としても見ることができる。語弊覚悟で言うと特徴抽出、次元削減とも言える。


f:id:vaaaaaanquish:20150125221815p:plain


これは二次元以上にも同じ事が言える。機械学習における次元とは問題の条件であったりするので、10000次元等の複雑な問題を簡単な視点にする事が出来る。


次元削減を複数回行って簡単化し、最後は分類や回帰の問題を解く。これが多層ニューラルネットワークである。

- Deep Learning -

多層ニューラルネットの考え方は、ニューラルネットの元始となるパーセプトロンが出て来た当初から存在していた。多層ニューラルネットは理論上どんな関数でも表現でき、今回のテーマのCNNも、日本人研究者である福島邦彦先生が1982年にネオコグニトロン*1として発表されたものが元になっている。

では何故その昔から存在する多層ニューラルネットワークが今話題なのか。
その理由として以下の3つ、ハードウェアと学習技術、次元削減がある。

  • ハードウェア性能の向上

前述の通り、ニューロンには活性化関数があり、それぞれのニューロン毎にパラメータが違う。
ニューラルネットは「学習」と呼ばれる作業によって、そのパラメータを調整し、関数の表現に至る。
学習は、データを入力しニューラルネットの出力から得た誤差を後ろ向きに伝搬しパラメータを微調整、次のデータを入力し出力から得た誤差を…という微調整作業の繰り返しである。誤差逆伝播*2


f:id:vaaaaaanquish:20150126052041p:plain

この"繰り返し計算する"作業というのはコンピュータの最も得意とする分野である。しかし、コンピュータにも限界がある。ニューラルネットの規模を大きくすれば精度を見込めるが、その反面で大きなニューラルネット、多層に繋げたニューラルネットの学習を処理できるマシンがなかった。それらの計算は、微分計算等が含まれ非常に複雑だったことも計算量増加に繋がっている。
ハードウェアの登場はとても大きいと言える。

  • "学習"技術の向上

先ほど学習として挙げた誤差逆伝播法は、多層のニューラルネットでは難しいという問題があった。*3
多層ニューラルネットで誤差を伝搬していくと、出力に近い層では正しく調整できるが、入力に近い層では誤差が拡散してしまい上手く調整できなかった。


      f:id:vaaaaaanquish:20150126052152p:plain

後述するが、そこを上手く学習するための手法が多く提案され、その結果にDeep Learningがある。

  • 次元削減

前述したように、Deep Learningは次元削減を繰り返すで問題の特徴を捉える。この作業はその他の機械学習器を使う際、画像であればSIFTやHOGといった"別のアルゴリズム"を用いて行っていた。そして、問題に応じてこの特徴量設計が上手く噛み合わないと、いくら機械学習器自体の精度が高くても良い結果が出ない。それらはノウハウを用いて、ある意味手動で設計する必要があった。

Deep Learnigでは、その多層構造によって次元削減を行う事になる。これにより、特徴抽出の部分をニューラルネット構造1つで調整する事が可能であり、かつ得られる特徴量はその問題に適した形であるので、主題となる分類問題や回帰問題を上手く解決する事が出来る。


f:id:vaaaaaanquish:20150126052310p:plain


- Deep Learningにおける学習技術 -

学習手法では、データの取り方や誤差逆伝播法のアルゴリズム、活性化関数の工夫等様々な研究が出てきた。
中でもDrop outやpre-trainingがブレイクスルーのきっかけだと言える。

Drop outは学習する時に、一部のニューロンを無いものとする。Drop outすることで、誤差を拡散させずに上手く学習する事が出来るようになる(接続を無いものとするDrop Connect等もある)。

      f:id:vaaaaaanquish:20150126052855p:plain


Dropoutの実装と重みの正則化 - もちもちしている

  • pre-training

pre-training(事前学習)は、ある次元削減可能なニューラルネットモデルを事前に学習させておき、ある程度良い初期パラメータにしてから多層に繋げる手法である。pre-trainingによって、多層ニューラルネット全体を誤差逆伝播法で調整する際、良いパラメータから学習を始められるので、残念なパラメータに陥り抜け出せないという事が少なくなる。pre-trainingではRBMやAuto Encoder等のニューラルネットモデルが使われている。


f:id:vaaaaaanquish:20150126053048p:plain


研究が活発になり、RBMモデルを使ったDBM(Deep Boltzmann machines)やらCNN、DNN、RNN…技術の組み合わせや種類で様々なDeep Learningがあり、それらがごちゃごちゃになったネット記事が複数ある状況が今といった感じ。

- CNNにおける学習 -

CNNは前述のpre-trainingとは少し違った方法によって、その精度を確立する。

例として画像認識タスクを考える。
多層ニューラルネットワークの問題として勾配の更新が上手くできない問題(Vanishing gradient problem)を挙げたが、他に移動や歪みに対する柔軟性、汎用性に欠けるといった問題があった。ニューラルネットは、固定的な画像に対してはその画素入力から正しい応答を行うよう学習できる。しかし、ニューロン同士の接続が多さから、画素がズレるとその1つの入力の誤差が出力に影響を及ぼす事になる。それらのどちらの問題にも対応し、汎用性を高く考えられたのが、Convolutional Neural Network、CNNである。

- 局所受容野 -

画像のズレ等の入力が出力に影響し、そこから得られる誤差が学習の精度を下げているなら、その誤差が全てのニューロンに伝搬するのを止めてしまおうという考え方がある。多層ニューラルネットにおける層同士の接続を制限する"局所受容野"を用いる。

      f:id:vaaaaaanquish:20150126053545p:plain:h250:w300

図のように、層ごとに接続の制限を行う。中間層は左層の一部の局所的なデータを入力としている。局所的なデータを入力とするが、次の層(右層)でデータ全体を反映する事が可能となっている。さらに、逆向きに誤差の伝搬する際には、全てのニューロンに誤差が影響しない事が分かる。誤差の影響範囲を狭める事で、前述したVanishing gradient problemにも対応する形となる。局所受容野をオーバラップする(中間層-左層の接続でに関して被る部分がある)事で、データの欠損やズレがある場合でも、他ニューロンとの競合によって解決する事が出来る。

さらに、"共有重み"(Tied Weight)と呼ばれるテクニックを用いる。図のように局所受容野のノードの重みを共有する。更新する際に用いる伝搬誤差はそれぞれの誤差の和となる。

      f:id:vaaaaaanquish:20150126054639p:plain

この局所受容野を複数用いる事で、画像に移動、歪みが発生しても、それぞれ移動不変性を持った局所受容野の結果から統合的にデータを用いる事となり、高精度の認識が可能となる。

画像認識におけるCNNでは、この局所受容野をフィルタやウィンドウと捉え、重みを持たせる。この重みフィルタ(≒共有重みを持つノード群)をシフトしていく事で層の出力を決定する形を取る。実装の際には、様々あるが、下図のようなフィルタ処理となる場合が多い。

f:id:vaaaaaanquish:20150126055121p:plain
この局所受容野による処理を複数行う。先程同様フィルタ処理として表現すると以下のような図となる。
f:id:vaaaaaanquish:20150126055246p:plain
フィルタをかけたものを特徴マップと呼ぶ。それらは共有重みを持つ局所受容野(フィルタ)によって複数生成される。多層にする場合は前層の"特徴マップ"から同じ座標に対してフィルタをかけ足し合わせる。これがCNNが"畳み込みニューラルネットワーク"と呼ばれる所以でもある。数式で表すと畳み込み演算である事がよく分かる(要出典)。
f:id:vaaaaaanquish:20150126055215p:plain

- プーリング -

局所受容野によって、画像の移動不変性や誤差拡散の抑制を得た。しかし、図を見ても分かるように、畳み込み処理によって特徴マップは増えていくことになる。特徴マップが局所受容野のスケール次第で小さくなるとは言えるが、マップが増える計算時間は大きい。さらに以下の図のように、局所受容野のフィルタを1ピクセルずつ移動させる実装であれば、特徴を検出できるのに対して、2ピクセルの移動であれば検出できない可能性がある。1ピクセル毎に移動し計算を行うと計算時間が増加してしまう。そこで、CNNでは、プーリングと呼ばれるテクニックを用いる。

プーリングは、画像で言うところの低画像化である。ニューラルネットの層の間に非線形な低画像化処理を挟み、少ないニューロンで次の層へ入力する。この処理によって、移動不変性を確実なものとするだけでなく、畳み込み演算における計算の削減を行う事が出来る。

f:id:vaaaaaanquish:20150126055504p:plain

プーリングには平均をとるaverage poolingや最大値をとるmax poolingがあり、CNNにおいてそれぞれの効果や使い方が数多く研究されている。

- Convolutional Neural Network -

CNNでは、局所受容野による畳み込み演算とプーリングを交互に繋げ、最後に主題に合わせて全接続の3層ニューラルネットSVMを接続する。

f:id:vaaaaaanquish:20150126055607p:plain

最後、誤差逆伝搬法を適応し全体の調整をする事で精度を出す。

上記したような手法によって、今までのニューラルネットの問題を解決し、高精度でしっかり学習が行える素晴らしいDeep Learningである。

- まとめ -

  • ニューラルネットの誤差拡散を防げるDeep Learning
  • 人が設計していた特徴抽出の部分もやってくれるDeep Learning
  • Dropout,pre-trainingすごい
  • CNNはpre-trainingを使わずに実現(おかげで早い)
  • CNNは局所受容野で誤差拡散を防ぎ移動不変性を得る
  • CNNはプーリングよるニューロン削減を行っても学習できる

 

- あとがき -

CNN、面白い程精度が出るので研究室で改造するのが暇潰しになる。
あと、特徴マップとかも出力してみると興奮する。畳み込みは理に適ってて好き。
研究者も多くなってきたので、今後発展しそうな予測から記事にした。

多分こんな感じの発表をゼミや勉強会でするとマサカリ以前に見向きもされないとか思いながら書いた。
CNNとかフィルタ処理として捉えすぎると線形な機械学習器である事を同時に説明しづらいし、ちゃんとニューラルネットから学習や関数における工夫、実装ノウハウ的な部分まで次は書きたい。

最近は転移学習で別の問題を解いてからやると良いとか(ほぼpre-trainingに感じる)、学習の更新がそもそもとか色々あって、結局どこに落ち着くのかとかも見てて面白い。