【ラビットチャレンジ】深層学習day4レポート
◆Section1:強化学習
【要点のまとめ】
○強化学習
長期的な視点で、行動の結果として与えられる利益(報酬)をもとに、行動を決定する原理を改善していく仕組み
【確認テストなど自身の考察】
強化学習と通常の教師あり・教師なし学習との違いは何か
↓
教師なし・あり学習ではデータに含まれるパターンの発見およびそのデータから予測することが目標、強化学習では、優れた方策を見つけることが目標
と目標が違う
強化学習は線で、教師ありなし学習は点をイメージした。
【参考図書・関連情報】
○強化学習の実用例
・交通信号機制御
車の待ち時間などの最小化を目指して学習する
・広告の最適化
・囲碁やチェスなどのゲーム
【実装演習】
参考サイトでコードを確認
ーーー
for i in range(●):#●回繰り返し学習を行う
p_state = np.random.randint(0,9)#現在の状態をランダムに選択
n_actions = []#次の行動の候補を入れる箱
for j in range(9):
if reward[p_state,j] >= 1: #rewardの各行が1以上のインデックスを取得
n_actions.append(j) #これでp_stateの状態で移動できる場所を取得
n_state = np.random.choice(n_actions) #行動可能選択肢からランダムに選択
ーーー
↓参考サイト
https://dse-souken.com/2021/05/18/ai-17/
◆Section2:AlphaGO
【要点のまとめ】
○Alpha Go の学習ステップ
1:教師あり学習によるRollOutPolicyとPolicyNetの学習
2:強化学習によるPolicyNetの学習
3:強化学習によるValueNetの学習
○モンテカルロ木探索
該当手のシミュレーション回数が一定数を超えたら、その手を着手したあとの局面をシミュレーション開始局面とするよう、探索木を成長させる。この探索木の成長を行うというのがモンテカルロ木探索の優れているところである。
【確認テストなど自身の考察】【参考図書・関連情報】
AlphaGoが有名なプロ棋士に勝利した2015年のこと。
当時はあまり興味がなかったのですが、
あらためて記事の内容を確認すると、
これをきっかけに韓国では無気力に陥る人が増えたとか・・・
学歴重視・競争社会という背景もあるだろうが、
このような思いがけない反応があるように、
「AIの仕事が奪われる」という発想につながることもあるのだろうと感じた。
↓参考サイト
人工知能が人類に勝利…AlphaGoの衝撃
【実装演習】
参考サイトでコードを確認
↓参考サイト
https://codezine.jp/article/detail/10952
AlphaGoのコードと比較すると
・残差ブロックが使われている
・出力が枝分かれしている点が大きな違いとなる
とのことだ。
残差ブロックは、畳込み層とSkip Connectionを組み合わせた構成。
2つの枝から構成されていて、それぞれの要素を足し合わせる。残差ブロックを導入することで、結果的に層の深度の限界を押し上げることができ、精度向上に貢献。
◆Section3:軽量化・高速化技術
【要点のまとめ】
○分散深層学習
深層学習は大量のデータ・パラメータを処理するため、高速な計算が求められる。複数の計算資源(ワーカー)を使用し、並列的にニューラルネットを構成することで、効率の良い学習が期待される。
○CPU
高性能なコアが少数
複雑で連続的な処理が得意
○GPU
比較的低性能なコアが多数
簡単な並列処理が得意
ニューラルネットの学習は単純な行列演算が多いので、高速化が可能
(大量の計算が発生するが、一つ一つの計算はコンピュータにとっては簡単なもの・・・という気付きがあった)
○軽量化の代表的な手法
量子化:通常のパラメータの64 bit 浮動小数点を32 bit など下位の精度に落とすことでメモリと演算処理の削減を行う。精度の低下というデメリットがある。
蒸留:学習済みの精度の高いモデルの知識を軽量なモデルへ継承させる。知識の継承により、軽量でありながら複雑なモデルに匹敵する精度のモデルを得ることが期待できる。
プルーニング:寄与の少ないニューロンの削減を行いモデルの圧縮化、計算の高速化を行う
【確認テストなど自身の考察】
○精度の実験結果
どれくらいが有意差があると見なされるかは定かではないが、
量子化により数値や画像の見た目に大きな差はないと言えそうだ。
<https://arxiv.org/pdf/1612.06052.pdf>
【参考図書・関連情報】
参考資料を見ると、分散学習とは手分けして大量のタスクを捌く
ということがイメージできた。
トレードオフとして、タスクの管理や習熟度が気になったが、
冒頭の要点まとめに記載した通り、手分けしているのは
単純な計算であると仮定するなら大きな支障はないのだろう。
↓参考資料
【実装演習】
課題なし
◆Section4:応用技術
【要点のまとめ】
○MobileNet
入力マップのチャネルごとに畳み込みを実施、出力マップをそれらと結合(入力マップのチャネル数と同じになる)
○DenseNet
特徴マップの入力に対し、
・Batch正規化
・Relu関数による変換
・3 x 3畳み込み層による処理
を行い、出力を計算
【確認テストなど自身の考察】【参考図書・関連情報】
MobileNetはバージョン2が出ている。
性能実証面では、画像分類、物体検出、セグメンテーションなどで効率的ながら同一モデルと同等の精度もしくはより高い精度で、高速に出力することがあきらかになっている。
↓参考サイト
検証(他モデルとの比較)の項目を見ると、
比較してシンプルな構成であることがわかる。
実務で体感できない以上、比較することでしか理解を深めることが難しい。
【実装演習】
参考サイトでコードを確認
パッケージにMobileNetも含まれている
ーーー
from keras.applications
import MobileNetV2 from keras.applications
import MobileNet from keras.applications
import VGG16 from keras.optimizers
import Adam import pandas as pd
import numpy as np from sklearn
import preprocessing from keras.utils
import np_utils
ーーー
バッチサイズ・エポック数を設定
ーーー
NUM_TRAIN = len(train_meta_df)
NUM_TEST = len(test_meta_df)
IMG_SIZE = 224
NUM_BATCH = 128
NUM_EPOCH = 40
ーーー
↓参考サイト
https://qiita.com/simonritchie/items/f6d6196b1b0c41ca163c
◆Section5:Transformer
【要点のまとめ】
○ニューラル機械翻訳の問題点
文長が長くなると表現力が足りなくなる
○Attentionの役割
辞書オブジェクトのように、query(検索クエリ)に一致するkeyを索引し、対応するvalueを取り出す
【確認テストなど自身の考察】
21ページのまとめについて、
「未来の単語を見ないようにマスク」
があまりイメージできなかった。
【参考図書・関連情報】
・翻訳において、Seq2seqよりも早くて精度が高い
・RNNもCNNも使わずに Attentionのみを使用 したEncoder-Decoderモデル、計算量も精度も改善
・並列計算可能
・全結合層
↓参考サイト
https://qiita.com/omiita/items/07e69aef6c156d23c538
【実装演習】
参考サイトでコードを確認
エンコード
ーーー
for ts in tokenized_string:
print ('{} ----> {}'.format(ts, tokenizer_en.decode([ts])))
ーーー
ーーー
def encode(lang1, lang2):
lang1 = [tokenizer_pt.vocab_size] + tokenizer_pt.encode(
lang1.numpy()) + [tokenizer_pt.vocab_size+1]
lang2 = [tokenizer_en.vocab_size] + tokenizer_en.encode(
lang2.numpy()) + [tokenizer_en.vocab_size+1]
return lang1, lang2
ーーー
↓参考サイト
https://www.tensorflow.org/tutorials/text/transformer?hl=ja
◆Section6:物体検知・セグメンテーション
【要点のまとめ】
○GAN(Generative Adversarial Nets)
Generator:乱数からデータを生成
Discriminator: 入力データが真データ(学習データ)であるかを識別
↓
2プレイヤーのミニマックスゲーム
・1人が自分の勝利する確率を最大化する作戦を取る
・もう一人は相手が勝利する確率を最小化する作戦を取る
○DCGAN(Deep Convolutional GAN)
GANを利用した画像生成モデル
中間層に全結合層を使わない
バッチノーマライゼーションを適用
・Generator
Pooling層の代わりに転置畳み込み層を使用、乱数を画像にアップサンプリング
最終層はtanh、その他はReLU関数で活性化
・Discriminator
Pooling層の代わりに畳み込み層を使用、画像から特徴量を抽出し、最終層をsigmoid関数で活性化
Leaky ReLU関数で活性化
【確認テストなど自身の考察】
○テキスト12ページ学習ステップの可視化
初期状態から学習終了をイメージできた。
Discriminatorが学習している間、Generatorは何をしているのか気になった。
考える間もなく、相互に処理が行われているのだろうか。
【参考図書・関連情報】
このような技術が発展していけば、
過去の漫画家や画家の作風で再生が可能になってくるのだろう。
まさに、GeneratorとDiscriminatorを贋作師と鑑定士に例えた世界が実現するのであろう。
DCGANを用いたイラスト事例からの画風の再現
↓参考資料
【実装演習】
参考サイトとコードを確認
生成器と識別機を結合
ーーー
def build_gan(generator, discriminator):
model = Sequential()
model.add(generator)
model.add(discriminator)
return model
ーーー
↓参考サイト
https://sinyblog.com/deaplearning/dcgan-001/
この記事が気に入ったらサポートをしてみませんか?