ニューラルネットワーク (neural network) |
2017-03-12 - 2018-05-30 (update) |
|
|
*ニューラルネットワーク とは
脳の神経細胞(ニューロン)を模した仮想的な計算素子(以降,ユニットと表記)を組み合わせたネットワークです.1つのユニットは複数の入力値から1つの値を計算して出力します.図1に,ユニットの入出力の例を示します.
[img:3csr]
{{small:図1 ニューラルネットワークを構成するユニットの入出力}}
各ユニットで行う計算は単純ですが,それを組み合わせたネットワークは様々な機能を実現できます.その代表的な例として,図2に示すように入力データの内容を分類するクラス分類があります.
[img:tdcr]
{{small:図2 手書き文字画像の認識}}
{{small:入力は画像,出力は各クラス(0~9)についての確率}}
ただし,所望の機能を高い信頼度で実現するネットワークを作るには,各ユニットでの計算に使うパラメータを適切に調整する必要があります.この工程は学習(或いは訓練)と呼ばれます.
学習には,あらかじめ正解値(Ground Truth)が既知の学習データを使います.具体的には,現時点のパラメータを基に学習データから出力値を推定し,それが正解値に近づくようにパラメータを補正する,という処理を繰り返します.
ニューラルネットワークについて詳しく学びたい場合,[1]の文献が参考になります.
{{small:[1]斎藤康毅, "ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装", O'Reilly Japan, 2016}}
{{small:[link:https://www.oreilly.co.jp/books/9784873117584/] }}
*サンプルコード (C++)
ライブラリ:[link:simplesp]
サンプルコード:simplesp/sample/sp/train
画像を入力に,クラス分類を行うネットワークを構築します.
プログラムを動かすには,次のいずれかのデータセットをダウンロードしておく必要があります.
{{small:MNIST(手書き数字データ): [link:http://yann.lecun.com/exdb/mnist/] }}
{{small:CIFAR-10(カラーの一般物体): [link:https://www.cs.toronto.edu/~kriz/cifar.html]}}
>> ご意見・ご質問など お気軽にご連絡ください.info