手書きの申請書を、だれが読むのか
ある市役所では、毎月何千枚もの手書きの申請書が届きます。以前は、職員が一枚ずつ入力していました。
今は、スキャンした文字をコンピューターが読み取り、職員は確認だけをします。
人によって字の形はばらばらです。それでも読めるのは、ニューラルネットワークのおかげです。このレッスンでは、そのしくみを数式を使わずに説明します。
このレッスンのゴール
メモ
ニューラルネットワークとは何かを、自分の言葉で説明できる。
キーワード
| ことば | いみ |
|---|---|
| ニューロン | 入力に重みをかけて足し、次に伝える小さな計算の単位です。 |
| 重み | それぞれの入力を、どれだけ重く見るかを表す数です。 |
| 層 | 同じ段に並んだ、ニューロンのまとまりです。 |
| ニューラルネットワーク | ニューロンを層にしてつないだモデルです。 |
| ディープラーニング | 層をたくさん重ねたネットワークで学ぶことです。 |
学生が入力するセルは、このプレビューでは空白です。
ニューロンは、かけて足して比べる
電力会社の問い合わせ窓口で、メールが急ぎかを決める場面を考えます。
ニューロンは、いくつかの入力を受け取ります。たとえば「停電という言葉があるか」「至急という言葉があるか」です。
入力にはそれぞれ重みがあり、大事な入力ほど重みが大きくなります。ニューロンは、入力と重みをかけて足し、決めた値と比べます。
計算例: メール一通を判定する
| 入力 | あるか(1か0) | 重み | かけた値 |
|---|---|---|---|
| 「停電」という言葉 | 1 | 3 | 3 |
| 「至急」という言葉 | 0 | 2 | 0 |
| 法人のお客さま | 1 | 1 | 1 |
| 合計 | 4 | ||
| 判定(3以上なら急ぎ) | 急ぎ |
学生が入力するセルは、このプレビューでは空白です。
やってみよう: ニューロン一つを動かす
# 問い合わせメールが急ぎかを決める、ニューロン一つです。
# 入力: 「停電」がある、「至急」がある、法人のお客さま (あれば 1、なければ 0)
inputs = [1, 0, 1]
# 重み: どの入力をどれだけ重く見るか。学習で決まる数です。
weights = [3, 2, 1]
threshold = 3
total = 0
for i in range(len(inputs)):
total = total + inputs[i] * weights[i]
print("合計:", total)
if total >= threshold:
print("急ぎの問い合わせです。")
else:
print("通常の問い合わせです。")
# inputs を [0, 1, 0] に変えて、結果がどう変わるか見ましょう。
ニューロンを層にしてつなぐ
ニューロン一つでは、簡単な判断しかできません。そこで、たくさんのニューロンを層に並べます。
最初の層が入力を受け取り、その結果を次の層に渡します。最後の層が、答えを出します。
文字の読み取りなら、前の層は線や角を見つけます。後ろの層は、それを組み合わせて文字の形を見分けます。層をたくさん重ねて学ぶことを、ディープラーニングと呼びます。
学習とは、重みを少しずつ直すこと
重みは、最初はでたらめな数です。
ネットワークは例を一つ見て答えを出し、正解ラベルと比べます。外れたら、外れが小さくなる方向へ、重みを少しだけ直します。
これを何百万回もくり返すと、よく当たる重みになります。そのため、たくさんの例と、計算の速いコンピューターが必要です。
よくある誤解
注意
ニューラルネットワークは、人の脳と同じように考えている、と思われがちです。名前は脳から借りていますが、中でしているのは、かけ算と足し算のくり返しです。意味を理解しているわけではないので、答えは人が確かめましょう。