【tensorflow】keras.Sequentialの使い方が分かる【Kaggle Course – Intro to Deep Learning 1】A Single Neuron

Kaggle

アメリカのデータ分析コンペKaggleでは、世界中の優秀なデータサイエンティストによって作成された様々なeラーニング教材が無料で公開されています。

中でも、この記事では以下の講座について解説します。

Intro to Deep Learning
1.A Single Neuron

全編英語ですし、ところどころ説明を省略しているところもあるので、私なりにかみ砕いて解説していきます。

この記事で取り扱うライブラリ、モジュール、クラスは以下の通りです。

Library
tf.keras
Module
tf.keras.layers
Class
tf.keras.layers.Dense
tf.keras.Sequential

A Single Neuron(単一ニューロン)

Welcome to Deep Learning!(ディープラーニングへようこそ!)

このコースでは、TensorflowKerasを使って以下のことを学んでいきます。

  • ニューラルネットワークアーキテクチャの作成
  • 回帰と分類の2つの問題にニューラルネットを適用する
  • 確率的勾配降下法を使って、ニューラルネットをトレーニングする
  • ドロップアウト、バッチ正規化などによるパフォーマンス向上

What is Deep Learning?(ディープラーニングとは?)

ディープラーニングは近年、目覚ましい進歩を遂げています。

特に、自然言語翻訳、画像認識、ゲームプレイなどで、いずれもディープラーニングが人間に近い、もしくはそれ以上の実力をつけています

そもそも、ディープラーニングとは何でしょうか?ディープラーニングとは、深い階層を持ったニューラルネットワーク(ディープニューラルネットワーク)による機械学習方法のことです。

ハードウェアや研究の進歩に伴い、深い(複雑な)ニューラルネットワークが計算できるようになったことによって、これまで人間にしかできなかった難しい推論が機械にできるようになってきたのです。

ちなみに、ニューラルネットワークはニューロンで構成されていますが、各ニューロンは単純な計算しかできません。ニューラルネットワークの実力は、各ニューロンが人間の神経のように複雑に絡み合うことによってもたらされます

The Linear Unit(線形ユニット)

まず、ニューラルネットワークの基本要素「ニューロン」について説明します。

一番シンプルなニューラルネットワークは下の図のようになり、これを線形ユニットと呼びます。

View post on imgur.com

y=wx+b

入力はxで、ニューロンへ接続するときにはwという重み(パラメータ)を掛けます。ニューラルネットワークでは、このパラメータを「学習」します。

bは、バイアスと呼ばれる特別なパラメータです。このバイアスにより、ニューロンは入力とは無関係に出力を変更できます。

yは、ニューロンが最終的に出力する値です。

単純パーセプトロンと線形ユニットの違いは、活性化関数です。単純パーセプトロンでは分類を行いますが、線形ユニットでは線形変換を行います。

単純パーセプトロン
線形ユニット

下記URL参照
Linear unit of neural network

Example(線形ユニットの具体例)

線形ユニットの具体例を説明します。例えば、シリアルのカロリー数を計算するモデルを作るします。

インプットxとしてシリアルに含まれる「砂糖の含有量sugars」、アウトプットyとして「カロリーcalories」を設定します。

80 Cereals(80種類のシリアルの栄養素を格納したデータセット)を使うと、パラメータがそれぞれb=90w=2.5と導き出せるでしょう。

View post on imgur.com

完成したモデルにx=5を入れれば、y=102.5という推論を得ることができます。

Multiple Inputs(入力が複数ある線形ユニット)

80 Cerealsには砂糖の含有量sugars以外にもたくさんの特徴量があります。

モデルを拡張して、食物繊維fiberやタンパク質proteinの含有量などを加えることも可能です。その場合、ニューロンに入力x1, x2を追加し、それぞれに重みw1, w2を掛けるようにします。

View post on imgur.com

このニューロンの計算式は、y = w0x0 + w1x1 + w2x2 + b となります。

Linear Units in Keras(Kerasによる線形ユニット)

ここまで学んできたことをKerasで実装してみましょう。keras.Sequentialを使うと、線形ユニットを作成できます。

3つの入力sugars, fiber, proteinに対して、1つの出力caloriesを生成する線形ユニットは以下のように記述します。

from tensorflow import keras
from tensorflow.keras import layers

# Create a network with 1 linear unit
model = keras.Sequential([
    layers.Dense(units=1, input_shape=[3])
])

まず、karas.Sequentialで、線形ユニットを作成します。

その際、layers.Denseでニューラルネットワークの層を定義します。

最初の引数unitsには、出力数です。ここではcaloriesを予測するだけなので、units=1とします。

2番目の引数input_shapeには、入力数です。sugars, fiber, proteinを入力とするので、input_shape=[3]とします。

これで、インプットが3つ,アウトプットが1つのニューラルネットワーク(線形ユニット)ができました。

input_shapeがリストになっているのは、インプットに拡張性を持たせるためです。例えば、画像がインプットとなる場合、input_shapeheight, width, channelsの3次元が必要になるかもしれません。

Your Turn(練習問題)

ここまで学習してきた内容を練習問題で実践してみましょう。

今回はKaggle Courseで単一ニューロンについて学びました。線形ユニットとはいえ、多変数になるとなかなかのモデルが作成できそうですね。次回はディープニューラルネットワークについて学んでいきます。

以上、最後までお読みいただきありがとうございました。

コメント

タイトルとURLをコピーしました