前回「ディープラーニングの基礎」として解説した「パーセプトロン」は、複数の入力を受け取り、1つの出力を返すという非常に単純な構造でした。入力は数値で、出力は0か1のいずれかです。具体的には、複数の入力値に「重み」を掛け算し、足し合わせた値が出力側に送られ、その値によって0を出力するのか1を出力するのかが決まる……というところまで説明しました。

A、Bの入力値にそれぞれ「重み」が掛け算された上で合算され、その合計値がCで判定されて0または1が出力される

ここで「パーセプトロンがたくさん繋がったものがディープラーニングです」と言い切るにはまだ少し説明が足りません。ディープラーニングについてもう少し理解を深めるために、今回は「バイアス」という考え方について説明します。

条件を偏らせる要素「バイアス」

前回紹介した水の例では、出力値を判定するCの条件に「300ml以上ならば1を出力し、300ml未満ならば0を出力する」と設定しました。そのため、Aの重みが1でBの重みが2のとき、Aから150ml、Bから50mlの水が入れられた場合、合計は250mlとなり、0が出力されます。

合計300ml以下なので、0が出力される

前回、ディープラーニングではこの重みの部分を学習するのだと説明しましたが、それを聞いて「Cの条件は固定なのだろうか(学習しないのだろうか)」と疑問に思った方がいるかもしれません。

Cの条件のうち「Cからは、0または1を出力する」という部分は固定ですが、「いつ1を出力して、いつ0を出力するのか」については学習によって調整されます。先の例で言うと、判定の基準になる「300ml」という値が調整されるわけです。この「300ml」にあたる部分を表現するのが「バイアス」です。冒頭の図に「バイアス」を加えてみましょう。

冒頭の図にバイアスのイメージ(「1」と書かれた黄色の丸)を追加

上図の内、「1」と書かれた黄色の丸がバイアスを表しています。バイアスは日本語で「偏り」という意味で、その名の通り、Cの条件を偏らせるために存在しています。水の例で言えば、Cの水の量を調整する要素だと思ってください。

バイアスを導入する場合、Cの条件は「合計値が0以上ならば1、0未満ならば0を出力する」と決まります。これは、学習によって変化しない固定のものです。

もう少し具体的な例で見てみましょう。

バイアスに設定された値が「-300ml」、すなわち「300mlの水を捨てる」だったとします。このとき、Aから入れられた水150mlとBから入れられた水50mlはそれぞれの重み(1、2)によって変化し、Cに届けられて合計250mlとなりますが、そこでバイアスにより300mlが捨てられるわけです。結果、-50mlとなり、0未満なのでCからは0が出力されます。

バイアスによって水が捨てられた結果、合計値は0未満になるので0が出力される

お気づきの方もいるかもしれませんが、実は「バイアスに-300mlを設定し、Cで0以上ならば1、0未満ならば0を出力する」ことは、最初にCに設定していた条件「300ml以上ならば1を出力し、300ml未満ならば0を出力する」と同じことを表しています。

得られる結果は同じでも、バイアスを使っておいたほうが後々良いことがあるため、このように表現することが一般的です。そしてこのバイアスの値も重み同様、学習によって調整される部分なのです。

パーセプトロンの素晴らしさは、このA、B、バイアスから成る小さな塊を幾重にも重ねられるところにあります。早速、パーセプトロンを2層にしてみましょう。2層にしたパーセプトロンは網状に結び付いているので、「ネットワーク」と呼びます。以下の図は、2層のネットワークと言えます。

2層のネットワーク。文献によってはこの図の0層目を1層目と数え、3層としているものもある

ネットワークが何層であるかは、横のつながりの数を見て判断します。それぞれの層の一番上の「1」と書かれた丸は、バイアスを表しています。この例ではA~Dが各層のなかで縦に2個ずつ並んでいますが、2個に限定するものではありません。

バイアスから出ている矢印には各バイアスの値が、A~Dから出ている矢印にはそれぞれ異なる重みが設定されています。0層目のA、Bが入力で、入力とバイアス以外の要素(C、D、E)からはそれぞれに設定された条件に従って1か0が出力されます。

見た目は少し複雑になりましたが、0層目の1(バイアス)とAとB、1層目のCにだけ着目すれば先の図と同じであることがおわかりいただけるでしょう。パーセプトロンが2層になっただけで、個々の動きは同じなのです。

もちろん、さらに層を増やすこともできます。

3層目を追加

上図を見て、「パーセプトロンは複数の入力を受け取り、1つの出力を返す」はずなのに、CやDから矢印が2本ずつ出ていることを不思議に思うかもしれません(該当する矢印を緑に色付けしています)。これは、C(またはD)から複数種類の出力が出ているわけではなく、C(またはD)の出力をEとFの両方に渡していることを表したものです。

さあ、そろそろ見た目がディープラーニングらしくなってきました。しかしこのままではまだディープラーニングとは呼べません。ディープラーニングの正体を突き止めるまで、あと少しです。

著者紹介


国立研究開発法人 情報通信研究機構
ユニバーサルコミュニケーション研究所
データ駆動知能システム研究センター 専門研究員
大西可奈子

2012年お茶の水女子大学大学院博士後期課程修了。 博士(理学)。同年、大手通信会社に入社。2016年より現職。
一貫して自然言語処理、特に対話に関する研究開発に従事。
人工知能(主に対話技術)に関する講演や記事執筆も行う。
twitter:@WHotChocolate