【ラビットチャレンジ】 深層学習:その4 Day4まとめ
ラビットチャレンジ 深層学習:その4
講師の人
レコメンドエンジンを開発
TensorFlowについても少しふれていく
TensorFlowの使い方
実際の業務ではニューラルネットワークを実装するラッパー、ミドルウェアを利用することがほとんど
TensorFlowはユーザー数が一番多い
※ tensorflowインストール
pip3 install --upgrade tensorflow --ignore-installed python >> import tensorflow as tf (何事もなく完了)
※ 以下tensorflowの基本的な概念や使い方を列挙
constant
a = tf.constant(1) b = tf.constant(2, dtype=tf.float32, shape=[3,2]) c = tf.constant(np.arange(4), dtype=tf.float32, shape=[2,2])
constantの第一引数、初期化するパラメータ 第二引数、パラメータのタイプ 第三引数、テンソルのかたち
placeholder
箱のようなもの。
# プレースホルダーを定義 x = tf.placeholder(dtype=tf.float32, shape=[None,3])
variables
変数
# 変数を定義 x = tf.Variable(1)
線形回帰
noise=0.3
noise=0.1
d=5x+2, noise=0.1
非線形回帰
noise = 0.05
noise = 0.6
演習問題
TensorFlowによるMNIST
1層
3層(Adam)
3層(Momentum)
CNN(dropout_rate=0)
※ 中間層のサイズは、精度と速度のトレードオフ 中間層大きい:精度高い、速度遅い 中間層小さい:精度低い、速度早い
※ dropoutを実施しないと、精度は下がる
論文
論文から実装しよう
画像認識の最新モデルを実装するには? ・ VGG ・ AlexNet ・ GoogLeNet ・ Resnet ・ Yolo → 論文を見てみよう
※ ネットワークの形式や、リザルト、実装についても乗っているのでコツをつかむと論文から実務作業に落としこめる模様
※ VGGなどは有名なので、ブログでも解説があったりする
※ ライセンスには気をつけるべし
YOLO
物体認識の手法 → 実装まで公開されていて、githubにある
例題について
1 Inception module
GoogleNetの特徴としてInception moduleと呼ばれる復数のフィルタ郡により構成されたブロックが挙げられる。Inception moduleに関する記述として誤っているものはどれか
→ (a)が間違い。スパースなデータが増えているため
2 Auxiliary Less
GoogleNetnのの特徴としてAuxiliary Lessの存在が挙げられる。Auxiliary Lossに関する記述といて間違っているものを選べ
→ (a)が間違い。Classifiersを増やすことによって計算量は増える
3 ResNet
深くモデルを設計出来なかった問題は?
→ (a) 勾配消失問題
4 ResNet
層をまたがる結合の名前
→ (a)。Identity mapping、いわゆるスキップコネクションのこと
5 Residual Brock
Residual Brockの導入によって期待されたもの
→ (a)。ブロックへの入力にこれ以上変換が必要ない場合は重みが0となり、小さな変換が求められる場合は対応する小さな変換をより見つけやすくなる
6 転移学習
転移学習の記載として誤ったものはどれか?
→ (あ) 。ワンショット学習というののはあるクラスにたいして画像を1枚用意して、特徴ベクトルを抽出する。特徴ベクトルが同じクラスであれば近い、離れていれば遠いということで判断する。転移学習の説明としては不当
7 一般物体検出アルゴリズム
一般物体検出アルゴリズムとして正しいものを選べ
→ (a) (b)は最大2つというのが間違い。必ず定義された2つの候補領域が生成される (c) 2つの誤差の単純和が間違い。2つの誤差の重み付けまで表現されている (d)出力についてはカテゴリのプラスの確率と2つの候補領域が出力される
確認テスト
GG, GoogleNet, ResNetの特徴をそれぞれ簡潔に述べよ
→ VGGについては2014からあるモデル 、単純なモデルの積み重ねになっているのでシンプルなモデル。ただしパラメータ数は多い → GoogleNetはinception moduleを使っている。次元削減やスパースなもので表現されるのが特徴 → ResNetはスキップコネクション:identity moduleを使って深い学習が出来る
Keras1
TensorFlowをラップする形式で、簡単に記載が可能 ただし、柔軟性はTensorFlowの方が高く細かいところで記載が必要であればTensorFlowを利用することも多い データ分析の実際の実務でも使うことは多く、TensorFlowの次くらいに利用者が多い
Python演習
線形回帰
単純パーセプトロン
Epoch 30/30 4/4 [==============================] - 0s 3ms/step - loss: 0.2794 TEST [[ True] [ True] [ True] [ True]]
Epoch 100/100 4/4 [==============================] - 0s 2ms/step - loss: 0.1640 TEST [[ True] [ True] [ True] [ True]]
単純パーセプトロン(XOR)
... model = Sequential() model.add(Dense(input_dim=2, units=5,activation="relu")) model.add(Dense(1)) model.add(Activation('sigmoid')) model.summary() model.compile(loss='binary_crossentropy', optimizer=SGD(lr=0.1)) # トレーニング用入力 X と正解データ T X = np.array( [[0,0], [0,1], [1,0], [1,1]] ) T = np.array( [[0], [1], [1], [0]] ) ...
Epoch 300/300 4/4 [==============================] - 0s 4ms/step - loss: 0.0213 TEST [[ True] [ True] [ True] [ True]]
irisデータセット
花びらの大きさとかがく片のデータから花を分類したもの
relu
sigmoid
SGD(lr=0.1)
MNIST(NN)
sparse_categorical_crossentropy
Adam(lr=0.01)
MNIST(CNN)
※途中で中断
cifar10(分類問題)
※途中で中断
RNN
Epoch 1/5 10000/10000 [==============================] - 16s 2ms/step - loss: 0.0638 - acc: 0.9450 Epoch 2/5 10000/10000 [==============================] - 15s 2ms/step - loss: 0.0017 - acc: 1.0000 Epoch 3/5 10000/10000 [==============================] - 15s 2ms/step - loss: 6.6395e-04 - acc: 1.0000 Epoch 4/5 10000/10000 [==============================] - 15s 2ms/step - loss: 4.0004e-04 - acc: 1.0000 Epoch 5/5 10000/10000 [==============================] - 15s 2ms/step - loss: 2.8125e-04 - acc: 1.0000
RNN(sigmoid)
Epoch 1/5 10000/10000 [==============================] - 17s 2ms/step - loss: 0.2476 - acc: 0.5392 Epoch 2/5 10000/10000 [==============================] - 16s 2ms/step - loss: 0.2294 - acc: 0.6658 Epoch 3/5 10000/10000 [==============================] - 16s 2ms/step - loss: 0.1137 - acc: 0.8800 Epoch 4/5 10000/10000 [==============================] - 16s 2ms/step - loss: 0.0149 - acc: 1.0000 Epoch 5/5 10000/10000 [==============================] - 16s 2ms/step - loss: 0.0011 - acc: 1.0000 Test loss: 0.00022750332874086856 Test accuracy: 1.0
RNN(tanh)
Epoch 1/5 10000/10000 [==============================] - 17s 2ms/step - loss: 0.0302 - acc: 0.9633 Epoch 2/5 10000/10000 [==============================] - 15s 2ms/step - loss: 3.5838e-04 - acc: 1.0000 Epoch 3/5 10000/10000 [==============================] - 15s 1ms/step - loss: 3.0595e-04 - acc: 0.9999 Epoch 4/5 10000/10000 [==============================] - 15s 2ms/step - loss: 7.6703e-04 - acc: 0.9993 Epoch 5/5 10000/10000 [==============================] - 15s 2ms/step - loss: 8.6655e-05 - acc: 1.0000 Test loss: 7.51769667030231e-05 Test accuracy: 1.0
RNN(adam)
Epoch 1/5 10000/10000 [==============================] - 17s 2ms/step - loss: 0.1151 - acc: 0.8616 Epoch 2/5 10000/10000 [==============================] - 16s 2ms/step - loss: 0.0153 - acc: 0.9971 Epoch 3/5 10000/10000 [==============================] - 16s 2ms/step - loss: 8.0843e-04 - acc: 0.9999 Epoch 4/5 10000/10000 [==============================] - 17s 2ms/step - loss: 2.0166e-04 - acc: 0.9998 Epoch 5/5 10000/10000 [==============================] - 14s 1ms/step - loss: 1.5597e-05 - acc: 1.0000 Test loss: 7.87067476825779e-06 Test accuracy: 1.0
強化学習
強化学習とは 長期的に報酬を最大化できるように環境のなかで行動を選択 できるエージェントを作ることを目標とする機械学習の一分野 → 行動の結果として与えられる利益(報酬)をもとに、 行動を決定する原理を改善していく仕組みです。
確認テスト
強化学習が使えそうな分野 → オセロ、将棋などや自動運転、自動ゲーム操作など
探索と利用のトレードオフ
環境について事前に完璧な知識があれば、 最適な行動を予測し決定することは可能。 → どのような顧客にキャンペーンメールを送信すると、 どのような行動を行うのかが既知である状況。 →→ 探索と利用のトレードオフ 環境について事前に完璧な知識があれば、 最適な行動を予測し決定することは可能。 どのような顧客にキャンペーンメールを送信すると、 どのような行動を行うのかが既知である状況。
過去のデータで、ベストとされる行動のみを常に取り続ければ 他にもっとベストな行動を見つけることはできない。 → 探索が足りない状態 ↑ ↓ 未知の行動のみを常に取り続ければ、過去の経験が活かせない。 → 利用が足りない状態
強化学習の差分
結論:目標が違う ・教師なし、あり学習では、データに含まれるパターンを見つけ出す およびそのデータから予測することが目標 ・強化学習では、優れた方策を見つけることが目標
行動価値観数
行動価値関数とは ・価値を表す関数としては、状態価値関数と行動価値関数の2種類がある ある状態の価値に注目する場合は、状態価値関数 状態と価値を組み合わせた価値に注目する場合は、行動価値関数
方策関数
方策関数とは 方策ベースの強化学習手法において、 ある状態でどのような行動を採るのかの確率を与える関数のことです。
方策勾配法について
方策反復法 方策をモデル化して最適化する手法
Jとは? 方策の良さ → 定義しないといけない
定義方法 ・平均報酬 ・割引報酬和 上記の定義に対応して、行動価値関数:Q(s,a)の定義を行い。 方策勾配定理が成り立つ。
■方策勾配定理導出のポイント: 方策勾配定理は基本的には下記の2式から導出される
- 状態価値関数 v(s) = sum_a (π(a|s)Q(s,a)) - ベルマン方程式 Q(s,a) = sum_s’(P(s’|s,a)[r(s,a,s’) + γV(s’)]
DCGAN
敵対的ネットワークとCNNを使って、画像生成を行う → 実際には存在しないベッドルームの画像を生成したり
Leaky ReLU = 0以下が0じゃなくて、0.01 x になっている
Kaggle
10万人程度が参加している、機械学習のコンペサイト
※ 参加はfacebook id連携などで簡単にできる
※ これまでやってきた授業の内容で十分出来るようになっている
※ データセットの水増しとかテクニックは必要。Googleで調べると良い ※ 実際にやるとなるとKernelに関する議論などをまずは見てみる?
失敗談
- 一番最初つまずくのは、難しいのはどのコンテストに出るのか?
- データセットが大きすぎてPCでは難しい
※ 最初はシングルモデルにしておいて、最終的にアンサンブル学習をさせるのが良いとのこと
実践につながるアウトプット
今は基本的に学習はKaggleのドキュメントを見ることが多い