【TensorFlow】Playgroundで渦巻きを学習してみよう

今日は、ニューラルネットワークの動作を見えるようにした教育コンテンツであるPlaygroundを紹介します。

Playgroundは、ニューラルネットワークの図はよく見るけど今ひとつピンと来ないというあなたにピッタリなコンテンツです。

Playgroundでパラメーターを変更しながらいろいろ試してみれば、ニューラルネットワークが少し分かった気になれるに違いありません。

この記事の説明を参考に、ぜひいろいろ試してみてくださいね。

目次

Playgroundとは

tensor-playground01

参考:http://playground.tensorflow.org

Playgroundは、ブラウザでニューラルネットワークの学習過程を見られる教育コンテンツです。

Playgroundは、以下のように5つのブロックに分かれています。

tensor-playground02

①学習するデータを選択し、②特徴量を設定して、③モデルを作成したら、左上の再生ボタンをクリックしましょう。

リアルタイムで、④学習結果を確認できます。

⑤学習率なども設定できますので、これも試してみると良いでしょう。

①学習するデータ

Playgroundで作成するニューラルネットワークの目的は、学習するデータがない場所も含めて、青い点があるだろう領域と、オレンジの点があるだろう領域を色分けすることです。

学習するデータは、ニューラルネットワークに渡す青い点とオレンジの点の位置になります。

②特徴量

Playgroundでは、ニューラルネットワークに入力する特徴量を選択できるようになっています。

特徴量は、ニューラルネットワークが学習するための初期値のようなものと考えれば良いでしょう。

ここで選択した特徴量を、次に説明するニューラルネットワーク(モデル)に通すことで、適当な学習結果を得ます。

③ニューラルネットワーク(モデル)

隠れ層の数(最大6層)と、各層のニューロンの数(最大8個)を設定できます。

このニューロンごとに重みなどの数値が用意されており、ニューラルネットワーク(モデル)全体で、より正しい学習結果が得られるように、各ニューロンの数値が自動的に調整されていきます。

重みは、重要度と考えると分かりやすいでしょう。

Playgroundでは、ニューロン間の線の太さで重み(重要度)を表していて、線が太いほど重視されており、逆に線が細いほど軽視されているということになります。

ニューラルネットワークでは、重みやバイアスが調整できるニューロンが多い方が、複雑な形も学習できるという考え方がありますので、この記事でも、あとで隠れ層とニューロンの数を最大にしてみます。

ただ、隠れ層やニューロンの数が増えると計算時間も増えるため、効率良く学習を進めるには、適切な数を見つける必要があります。

④学習結果

1エポックごとに学習結果が表示されます。

青い点とオレンジの点は前述した学習するデータで、背景に表示されている青い領域とオレンジの領域が、ニューラルネットワークが学習した結果です。

渦巻き(二重らせん)を学習する場合は、青い領域とオレンジの領域が、渦巻き状になれば、うまく学習できているということになります。

渦巻き(二重らせん)を学習しよう

それでは、①学習するデータを選択するところで渦巻きを選択して、ニューラルネットワークが渦巻きを学習できるか試してみましょう。

といっても、実は、以下のように②特徴量をすべて選択すると、他はすべてデフォルトでも3000エポック程度学習すれば、渦巻きは学習できてしまいます。

tensor-playground03

そこで、特徴量をデフォルトのままで、渦巻きを学習できるか試してみましょう。

まずは、隠れ層の数もニューロンの数もデフォルトのままで試してみます。

tensor-playground04

4000エポックまで頑張ってみましたが、渦巻きになる気がしません。

次は、隠れ層もニューロンも増やしてみます。

こういうのは極端にやってみた方が面白いので、隠れ層もニューロンもPlaygroundで設定できる最大数にしてみたところ、見事に学習結果が渦巻きのようになりました。

tensor-playground05

よく見ると、5層目ですでに渦巻きのような状態を学習していますね。

そこで、隠れ層を4層に減らして試してみると、やはり渦巻きに近い形を学習しています。

tensor-playground06

これもよく見てみると、4層目の一部のニューロンでは、学習結果が非常に似通っています。

これは、ニューロンの数を減らしても大丈夫なのでは…?

ということで、3層目も4層目もニューロンの数を2つずつ減らしてみましたが、まだ渦巻きっぽい。

tensor-playground07

ここで、4層目で渦巻きっぽい形を学習しているのを発見したので、まさかの3層に変更してみます。

これでも、なんとか渦巻きを学習したと言えますね。

tensor-playground08

さらに隠れ層やニューロンを減らしても渦巻きを学習するかもしれません。

これ以降は、読者の方の宿題ということにしますので、ぜひ試してみてください!

その他のパラメーター

Playgroundでは、その他に、学習率活性化関数(ReLU、Tanh、Sigmoid、Linear)、正則化方式(正則化無し、L1正則化、L2正則化)、正則化パラメータを選択できます。

項目説明
学習率
重みの更新量を決めるパラメーター。大きいとどんどん学習が進む、小さいと中々学習が進まない。大きくしすぎると、変に学習して思わしくない結果になることがある。
活性化関数
ニューロンに入力した値をどのように変換して、次のニューロンに出力するかを決める関数。関数ごとに特徴がある。
正則化方式
L1正則化はパラメータの要素の絶対値を合計したもの。損失関数にこれをつけるとパラメータを疎にできる。L2正則化はパラメータの各要素の二乗和のルートを取ったもの。過学習を防げる。
正則化パラメータ
正則化方式で計算された値をどの程度重みに反映するかを決めるパラメーター。大きいと中々学習が進まない、小さいと正則化が上手く働かないなどの可能性があり、適切な値を見つけることが重要

これも、Playgroundでいろいろ値を変えて、何度か試してみてください!

まとめ

今回は、Playground渦巻きを学習するためのニューラルネットワークを作成してみました。

レイヤーの数やニューロンの数だけでなく、初めの特徴量によって、学習結果が大きく変わることもわかりました。

色々な設定を試して、自分なりの理解を深めてください!

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次