🎉

ラビット・チャレンジ レポート 深層学習day4

2022/03/20に公開約3,400字

Section1:強化学習

1-1 要点

  • 強化学習とは、長期的に報酬を最大化できるように環境のなかで行動を選択できるエージェントを作ることを目標とする機械学習の一分野
  • 行動の結果として与えられる利益(報酬)をもとに、行動を決定する原理を改善していく仕組み

1-2 実装

TensolFlowによる線形回帰の実装

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

iters_num = 300
plot_interval = 10

# データを生成
n = 100
x = np.random.rand(n)
d = 3 * x + 2

# ノイズを加える
noise = 0.3
d = d + noise * np.random.randn(n) 

# 入力値
xt = tf.placeholder(tf.float32, shape=[None,1])
dt = tf.placeholder(tf.float32, shape=[None,1])

# 最適化の対象の変数を初期化
W = tf.Variable(tf.zeros([1]))
b = tf.Variable(tf.zeros([1]))

y = W * xt + b

# 誤差関数 平均2乗誤差
loss = tf.reduce_mean(tf.square(y - dt))
optimizer = tf.train.GradientDescentOptimizer(0.1)
train = optimizer.minimize(loss)

# 初期化
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

# 作成したデータをトレーニングデータとして準備
x_train = x.reshape(-1,1)
d_train = d.reshape(-1,1)

# トレーニング
for i in range(iters_num):
    sess.run(train, feed_dict={xt:x_train,dt:d_train})
    if (i+1) % plot_interval == 0:
        loss_val = sess.run(loss, feed_dict={xt:x_train,dt:d_train}) 
        W_val = sess.run(W)
        b_val = sess.run(b)
        print('Generation: ' + str(i+1) + '. 誤差 = ' + str(loss_val))

print(W_val)
print(b_val)

#  予測関数
def predict(x):
    return W_val * x + b_val

fig = plt.figure()
subplot = fig.add_subplot(1, 1, 1)
plt.scatter(x, d)
linex = np.linspace(0, 1, 2)
liney = predict(linex)
subplot.plot(linex,liney)
plt.show()

1-3 確認テストなどの自身の考察

  • 強化学習と教師あり学習・教師なし学習の違い
    • 強化学習:「優れた方策」を見つけること目的
    • 教師あり学習・教師なし学習:「特徴を見つけたり」、データから「予測・分類」を行うことが目的

Section2:Alpha Go

2-1 要点

  • 囲碁のプログラム

  • 学習ステップ
    1.教師あり学習によるRollOutPolicyとPolicyNetの学習
    2.強化学習によるPolicyNetの学習
    3.強化学習によるValueNetの学習

2-2 確認テストなどの自身の考察

  • Alpha Go と Alpha Go Zero の違い
    • 教師あり学習を行わず、強化学習のみ
    • 特徴入力からヒューリスティックな要素を排除し、石の配置のみにした
    • モンテカルロ木探索からRollOutシミュレーションをなくす

Section3:軽量化・高速化技術

3-1 要点

  • 深層学習は多くのデータを使用したり、パラメータ調整のために多くの時間を使用したりするため、高速な計算が求められる

  • 複数の計算資源(ワーカー)を使用し、並列的にニューラルネットを構成することで、効率の良い学習を行いたい

  • データ並列化、モデル並列化、GPUによる高速技術は不可欠

3-2 確認テストなどの自身の考察

  • 膨大な行列計算を行うニューラルネットワークにとって並列計算できるGPUは高速化に役立つが、個人で十分なリソースを準備するのは難しい
  • そこで、近年はAWSやGCPなどのクラウドサービスを用いることで個人でも手軽にGPUリソースを利用することができるので積極的に有効活用していきたい

Section4:応用モデル

4-1 要点

  • MobileNet

    • Depthwise ConvolutionとPointwise Convolutionの組み合わせで軽量化を実現
    • 入力マップのチャネルごとに畳み込みを実施
    • 出力マップをそれらと結合(入力マップのチャネル数と同じになる
  • DenseNet

    • CNNアーキテクチャの一種
    • ニューラルネットワークでは層が深くなるにつれて、学習が難しくなるという問題があったが、ResNetなどのCNNアーキテクチャでは前方の層から後方の層へアイデンティティ接続を介してパスを作ることで問題を対処した

4-2 演習問題

  • Depthwise Convolitionはチャネル毎に空間方向へ畳み込む。すなわち、チャネル毎にDK×DK×1のサイズのフィルターをそれぞれ用いて計算を行うため、その計算量は(い)となる

H * W * C * K * K

  • 次にDepthwise Convolutionの出力をPointwise Convolutionによってチャネル方向に畳み込む。すなわち、出力チャネル毎に1×1×Mサイズのフィルターをそれぞれ用いて計算を行うため、その計算量は(う)となる

H * W * C * M

Section5:Transformer

5-1 要点

  • RNNを用いないで、Attentionだけで実現可能
  • RNNを用いないので、Position Encodingという単語列の語順情報を追加する必要がある
  • 入力を全て同じにして学習的に注意箇所を決めていく

5-2 確認テストなどの自身の考察

  • 近年のNLP界隈で発表される最新モデル(BERT, BPT-3など)はどれもTransformerをベースモデルとしている
  • そのTransformerの提案論文である「Attention Is All You Need(2017)」は自然言語処理の動向を理解するには読むべき論文であると感じている

Section6:物体検知・セグメンテーション

6-1 要点

  • 物体検知とは、画像内のどこになにがあるのかを検出する
  • 物体検知以外にも以下のような物体認識タスクがある
    • 分類:(画像に対し単一または複数の)ラベルを出力
    • 物体検知:Bounding Boxを出力
    • 意味領域分割:(各ピクセルに対し単一の)クラスラベルを出力
    • 個体領域分割:(各ピクセルに対し単一の)クラスラベルを出力

6-2 確認テストなどの自身の考察

  • 確認テストの代わりに以下の問題を解いた

Discussion

ログインするとコメントできます