株式会社フュージョンシス〒105-0023 東京都港区芝浦 1-14-8-901
http://fusionsys.com/ | info@fusionsys.com

ニューラルネットワークの基本

株式会社フュージョンシス

文書バージョン
ver. 1.0

日付

変更点2017 年 6 月 28 日

作成

目次

1.
2.
3.
4.
5.
6.
7.

まえがき ....................................................................................................... 1
学習とは何か？ ............................................................................................ 1
toy モデルによる、”学習とは何か”の説明 ..................................................... 2
実際のニューラルネットワークの構成 ............................................................. 6
NN の学習の詳しい説明 ............................................................................... 6
学習の進行 .................................................................................................. 9
認識とは何か？ ............................................................................................ 9i

株式会社フュージョンシス〒105-0023 東京都港区芝浦 1-14-8-901
http://fusionsys.com/ | info@fusionsys.com

123456789101112131415161718192021222324252627282930313233343536

1. まえがき
多層ニューラルネットワークは、古くから知られ、3 層にすると、2 層ニューラルネットワークでは学習できないデータ (例えば exclusiveOR) も学習できることが数十年前に知られていました。しかしそのころのコンピュータは非力で、大したことは出来ませんでした。一方ハードウェアなどの進歩で、ニューラルネットワークの能力が飛躍的に高まり、ビジネスに結びつく応用が可能になっているのが現在の状況だと思います。
多層ニューラルネットワークの実装は、非常に多数あります（株式会社フュージョンシスの代表者も何種類かを実装した経験があります）。一方 tensorflow は中身を知る必要がなく、API の使い方を覚えさえすれば、簡単に機械学習を行うことができるようになっている使いやすさが、人気の理由です。
まず公知のことを少しまとめます。
NN（以下ニューラルネットワークを NN と書きます）には、学習のフェイズと認識のフェイズの 2 つがあります。

2. 学習とは何か？
NN の学習とは、特定のベクトルの入力に対して、特定のベクトルを出力する、ベクトル値関数を構成することです。やや抽象的なので、もう少し具体的に書きます。
関数はy=f(x)のように書かれますが、x の範囲のことを定義域、y の範囲のことを値域と呼びます。すなわち
f:定義域----->値域

2017/06/28 印刷

1株式会社フュージョンシス〒105-0023 東京都港区芝浦 1-14-8-901
http://fusionsys.com/ | info@fusionsys.com

373839404142434445464748です。
3. toy モデルによる、”学習とは何か”の説明
ある未開人は 3 つの文字を持っています。その文字は我々の文字の”太陽””火””海”に相当するとします。

2017/06/28 印刷

2株式会社フュージョンシス〒105-0023 東京都港区芝浦 1-14-8-901
http://fusionsys.com/ | info@fusionsys.com

4950

太陽

51
5253

火54
55
56

海57
58
59
60
6162
63
64
6566
67
68
6970という 2 次元の表現を持っているとします。

この 3 つの表現はそれぞれ太陽---->010001100
火 ---->100000001
海 ---->000110000という binary 列に変換することが出来ます。一方 NN の出力は100 が出力されたら、”太陽”が認識され、32017/06/28 印刷

株式会社フュージョンシス〒105-0023 東京都港区芝浦 1-14-8-901
http://fusionsys.com/ | info@fusionsys.com

717273010
001が出力されたら、”火”が認識され、が出力されたら、”海”が認識されると考えます。

2017/06/28 印刷

4株式会社フュージョンシス〒105-0023 東京都港区芝浦 1-14-8-901
http://fusionsys.com/ | info@fusionsys.com

747576

この未開人の 3 つの文字を学習する NN は、”次のような振る舞いをする、9 次元空間を定義域とし、3 次元空間を値域とするベクトル値関数を構成すること”と定義できます。

文字

NN への入力

NN からの出力

出力の解釈

010001100

100

太陽100000001

010

火000110000

001

海77
78
79
2017/06/28 印刷

5株式会社フュージョンシス〒105-0023 東京都港区芝浦 1-14-8-901
http://fusionsys.com/ | info@fusionsys.com

808182
838485
868788899091
9293949596979899100
101102103104105106107
108109110111112113114115

4. 実際のニューラルネットワークの構成（jis 第一水準＋ひらがなカタカナ＋英数字）を学習・認識するニューラルネットワー
クは、784 次元ベクトル空間を定義域とし、3169 次元ベクトル空間を値域とする関数です（toy モデルの話の拡張になっています）。
各数字の由来は以下のとおり。
定義域の要素784（＝28x28 の画像のピクセル総数）個の要素を持つベクトル値域の要素
3169（ひらがな カタカナ

jis 第 1 水準漢字総数）個の要素を持つベクトル

5. NN の学習の詳しい説明
例えば漢字 ”井”の画像を 01 列に直す時（000101010000111....11111）
784（=28x28）個の binary 列だとします。このベクトルを NN に入力した時に（00000000000000100000000000......00000000000）
3169 個の中で文字コードの”井”を示す 501 番目に 1 個だけ 1 が立っているを出力してほしいわけです。

2017/06/28 印刷

6株式会社フュージョンシス〒105-0023 東京都港区芝浦 1-14-8-901
http://fusionsys.com/ | info@fusionsys.com

116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138

一方漢字”丼”の画像を 01 列に直す時（111101010000111....11111）
784（=28x28）個の binary 列だとします。この binary 列は、漢字”井”の binary 列とは当然異なります。このベク
トルを NN に入力した時に（00000000000000000001000000......00000000000）
3169 個の中で文字コードの”丼”を示す 623 番目に 1 個だけ 1 が立っているを出力する必要があります。そのような入出力関係は NN の結合素子間の重みを変えていくことで可能です （学習則は多数あります。tensorflow ではどの学習則を選ぶか意識しなくても良いようになっています。また私の経験上、どの学習則を選んでも、学習の速度は若干変わるようですが、学習の内容の大勢は変わらない感じです）。
そのような重みの変更を 3169 個の文字全てについて、行います。

2017/06/28 印刷

7

株式会社フュージョンシス〒105-0023 東京都港区芝浦 1-14-8-901
http://fusionsys.com/ | info@fusionsys.com

139

入力

出力入力するベクトル。ベク
トル空間の次元の数は784（=28x28）。

28x28 の画像に書かれている漢字（000101010000111....11111）（011100000000001....00010）（010101111000000....01110）

井丼
上3169 個の入力ベクトル（010100000100000....01000）

長 さ 784
binary 列

出力されてほしいベクトル。ベクトル空間の次元の数は 3169

漢字（0001000....00000）（0100000....00000）（0001000....00000）
3169 個の文字種類

金

長 さ 3169 のbinary 列

8

井丼
上3169 個の出力ベクトル（0010000....00000）の2017/06/28 印刷

出力ベクトルに対応する金株式会社フュージョンシス〒105-0023 東京都港区芝浦 1-14-8-901
http://fusionsys.com/ | info@fusionsys.com

140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164

6. 学習の進行
学習の初期には（0.23 0.1 0.11 0.009 0.008......）

3169 次元空間中のベクトルといった、どの文字を出力しているかあまりはっきりしないベクトルが出力されますが、十分に学習を繰り返すと、（0000001000000......00） 3169 次元空間中のベクトルといったどの文字を表しているかはっきり示すようなベクトルが出力されるようになります。

7. 認識とは何か？
認識とは、学習が完了した NN に対して、画郭 28x28 の画像ファイルを見せて、出力が3169 の文字のどれに近いかを判別する作業です。

■

2017/06/28 印刷

9