E資格挑戦!!

このブログはE資格取得に向けた学習内容をまとめたものです(^o^)

参考文献リスト

はじめに

 この記事はE資格対策を含め、AI(人工知能)に関する学習で活用した参考文献を記録したものです。勉強した本、勉強しようとしている本を逐次追記していきます。

(当面はAmazonのリンク先を引用します…)

参考文献リスト 

深層学習 (日本語) 単行本 – 2018/3/7

 ​AI研究の一分野として注目を集める深層学習(ディープラーニング)に関する教科書として世界的な評価を受けている解説書。深層学習の理解に必要な数学、ニューラルネットワークの基礎から、CNN(畳み込みニューラルネットワーク)やRNN(回帰結合型ニューラルネットワーク)などのすでに確立した手法、さらに深層学習の研究まで、深層学習の基礎を理論を含めてしっかり学習したい人に最適な内容になっている。近年の深層学習研究をリードする著名な研究者たちが執筆した入門者必読の書である。

www.amazon.co.jp

ゼロから作るDeep LearningPythonで学ぶディープラーニングの理論と実装

 ディープラーニングの本格的な入門書。外部のライブラリに頼らずに、Python 3によってゼロからディープラーニングを作ることで、ディープラーニングの原理を楽しく学びます。
ディープラーニングニューラルネットワークの基礎だけでなく、誤差逆伝播法や畳み込みニューラルネットワークなども実装レベルで理解できます。
ハイパーパラメータの決め方や重みの初期値といった実践的なテクニック、Batch NormalizationやDropout、Adamといった最近のトレンド、自動運転や画像生成、強化学習などの応用例、さらには、なぜディープラーニングは優れているのか?なぜ層を深くすると認識精度がよくなるのか?といった“Why"に関する問題も取り上げます。

www.amazon.co.jp

徹底攻略ディープラーニングE資格エンジニア問題集

AIエンジニアは必携の資格【ディープラーニングE資格(エンジニア)】にいち早く対応!

◆ JDLA認定プログラムの第1号事業者であるスキルアップAIの講師陣が執筆!
◆ 業界の第一人者 杉山 将氏(理化学研究所 革新知能統合研究センター センター長/東京大学 教授)監修!
◆ ていねいで分かりやすく解説。正答も誤答も技術解説しているので知識吸収も加速!
◆ 出題傾向を徹底分析した模擬問題を収録で合格力がさらにアップ!

●目次●
第01章 線形代数
第02章 確率・統計
第03章 情報理論
第04章 機械学習の基礎
第05章 前処理・特徴選択・性能指標
第06章 モデルの評価・正則化・ハイパーパラメータ探索
第07章 教師あり学習の各種アルゴリズム
第08章 教師なし学習の各種アルゴリズム
第09章 強化学習の各種アルゴリズム
第10章 深層学習の概要
第11章 順伝播計算と逆伝播計算
第12章 最適化手法
第13章 畳み込みニューラルネットワーク
第14章 再帰ニューラルネットワーク
第15章 深層学習を用いた自然言語処理
第16章 深層学習を用いた生成モデル
第17章 深層学習を用いた強化学習
第18章 開発・運用環境
第19章 総仕上げ問題
付録 覚えておくべきPython/NumPyの知識

www.amazon.co.jp

[第3版]Python機械学習プログラミング 達人データサイエンティストによる理論と実践

 

世界各国で翻訳された
機械学習本ベストセラーの第3版!

分類/回帰問題から、深層学習/強化学習まで、
機械学習コンセプト全般をカバー。
理論的背景とPythonコーディングの実際を解説しています。

第3版で敵対的生成ネットワーク、強化学習の各章を新たに追加し、
scikit-learnやTensorFlowなどなど新規のPython環境に対応。
13~16章の内容をほとんど刷新しています。

著者陣の経験に基づく洞察とより専門的な知識を学ぶことができて
理論と実践を架橋する解説書の決定版!


[原著の第1版]
●ドイツ語、韓国語、中国語、日本語、ロシア語、ポーランド語、イタリア語に翻訳。
●米国計算機学会「21st Annual list of Notable Books and Articles(2016)」にランクイン。

[日本語の第1版]
●「ITエンジニア本大賞2017」ベスト10にランクイン。

【構成(予定)】
第1章 「データから学習する能力」をコンピュータに与える
第2章 分類問題―単純な機械学習アルゴリズムの訓練
第3章 分類問題―機械学習ライブラリscikit-learnの活用
第4章 データ前処理―よりよい訓練データセットの構築
第5章 次元削減でデータを圧縮する
第6章 モデルの評価とハイパーパラメータのチューニングのベストプラクティス
第7章 アンサンブル学習―異なるモデルの組み合わせ
第8章 機械学習の適用1―感情分析
第9章 機械学習の適用2―Webアプリケーション
第10章 回帰分析―連続値をとる目的変数の予測
第11章 クラスタ分析―ラベルなしデータの分析
第12章 多層人工ニューラルネットワークを一から実装する
第13章 ニューラルネットワークの訓練をTensorFlowで並列化する
第14章 TensorFlowのメカニズム
第15章 画像の分類―ディープ畳み込みニューラルネットワーク
第16章 系列データのモデル化―リカレントニューラルネットワーク
第17章 新しいデータの合成―敵対的生成ネットワーク
第18章 複雑な環境での意思決定―強化学習

◎本書は『Python Machine Learning: Machine Learning and Deep Learning with Python<, br> scikit-learn, and TensorFlow 2,3rd Edition』の翻訳書です。

微積分/線形代数Pythonの文法、データ分析用ライブラリについて
ある程度理解している必要があります。

www.amazon.co.jp

 

AI学習の参考になるサイト【最新更新:3/13】

はじめに

 ラビット・チャレンジ以外にディープラーニング(E資格に限らず)の勉強に活用出来るサイトを探してみたので自身の備忘録の意味も含めて記載してみます。

coursera(コーセラ)

 海外の大学を中心としたオンライン教育のサイト。英語の授業が多いみたいですが日本語対応(字幕)が為されているものもありました。無料版のほか有料版もあり、有料版は修了試験と正式な認定証が発行されるようです。

 私はとりあえず「すべての人のためのAI【日本語版】」と「AI、機械学習ディープラーニングのための TensorFlow 入門」の二つの受講開始してみました。まだ受講中ですが、前者は技術的な話ではなくAIでどんなことが出来るかなどの全般的な講義で、どちらかと言うとディープラーニングのG検定向けな感じかと思います後者はエンジニア向けな理論と実践(実装)が主体のようなので、E資格対策含めて大いに参考になりそうです(`・ω・´)

ja.coursera.org

無料で学べるオンライン講座「gacco」

 大学教授をはじめとした一流の講師陣による本格的な講義を、誰でも無料で受けられるウェブサービス(下記公式サイトから抜粋)

 AI関連の科目がいくつか開講していたので受講してみました。

「AIの基礎と開発プロジェクトの進め方」

 全3回の講義があり、それぞれのテーマは「人工知能(AI)とは」、「生成AIの応用事例とその仕組み」、「AI開発プロジェクトの進め方」。

 「人工知能(AI)とは」は人口知能の基本的な事項(教師あり学習教師なし学習がある等々)、「生成AIの応用事例とその仕組み」では敵対性生成ネットワークの概念と応用例(見分けのつかないレベルの人物の画像生成、画像変換、スタイル変換への適用等の概要)、「AI開発プロジェクトの進め方」ではAIを含むシステム開発における企画・要件定義の重要性(ビジネスへのインパクトの大きさと技術的実現可能性のバランス、AIを目的化しない)、良いデータの必要性などの解説が主たる内容でした。

 全体として一時間程度のボリューム感で物足りない感じはありますが、基本的な内容を無料で学ぶ講義としては良いのではと思います。

 また、AI以外にも様々な講義(AIに関係するところでは統計学の講座など)もあるので参考になりそうです。修了証(pdf版)が発行される講義も多いので、取り組む上でのモチベーション維持も図れそうです。

 定期的に開講講座を確認していきたいと思います。以下、講義内容の抜粋です。

 

第1週:人工知能(AI)とは 講義:2021年3月12日15時 公開

1-0 イントロダクション
1-1 人工知能(AI)
1-2 機械学習

第2週:生成AIの応用事例とその仕組み 講義:2021年3月12日15時 公開

2-1 GANとは
2-2 GANの応用例
2-3 GANの仕組み

第3週:AI開発プロジェクトの進め方 講義&課題:2021年3月12日15時 公開

3-1 AI開発プロジェクトの流れ
3-2 企画・要件定義フェーズ
3-3 データ準備フェーズ
3-4 PoC開発フェーズ

lms.gacco.org

SIGNATE Quest

(記事作成中。リンクのみ)

quest.signate.jp

その他【Pythonのpdf(公開資料)】

(記事作成中。リンクのみ)

qiita.com

 

 

https://indico2.riken.jp/event/2492/attachments/4803/5587/Tanaka_Lecture.pdf

 

 

スケジュールなど【ラビット・チャレンジ(E資格)】

はじめに

 日本ディープラーニング協会のDeep Learning資格試験(E試験)受験に必要な協会認定の講座プログラム【00011:ラビット・チャレンジ】の修了(認定)条件などを記録しています。

 2021年8月の試験(2021#2)の受験に間に合うように学習予定です(・ω・)

 

認定までの流れ

 ラビット・チャレンジ修了(E資格の受験資格の認定)までの流れは下記の通り。各ステージごと、ビデオ学習。修了テスト・レポート提出が必要なようです(このブログのE資格の記事はレポートを兼ねています)。

f:id:satoshi19841011:20210214215100p:plain

各ステージの学習項目など

 各ステージの学習内容などは下記の通り。ビデオ視聴時間とは別に学習時間の設定がされています。各ステージテストのクリア条件(95%以上の正答率)はなかなかシビアな感じがします(;´∀`)

f:id:satoshi19841011:20210214215745p:plain

受験資格認定要件

 受験資格の認定は7月20日までにテストとレポートで合格しなければならないようです。余裕を持って取り組みたいです^^;。

f:id:satoshi19841011:20210214220957p:plain

認定スケジュール

 レポートとテストの修了時期によって認定のタイミングも変わるようです。やはり、早め早めに取り組むべきですかね(;´∀`)

f:id:satoshi19841011:20210214222450p:plain

ラビット・チャレンジの公式HP

ai999.careers

 

深層学習day3,4【ラビット・チャレンジ(E資格)】

深層学習day3

Section1:再帰ニューラルネットワークの概念

要点等

 再帰ニューラルネットワーク(RNN)とは時系列データに対応可能なニューラルネットワークである。時系列データとは、時間的順序を追って一定間隔ごとに観察され、しかも相互に統計的依存関係が認められるようなデータであり、音声データ、テキストデータなどがある。

 RNNの特徴として、時系列モデルを扱うには、初期の状態と過去の時間t-1の状態を保持し、そこから次の時間でのtを再帰的に求める再帰構造が必要になる。

 また、RNNにおいてのパラメータ調整方法としてBPTT(Backpropagation Through Time)がある。これは、逆誤差伝搬の一種で誤差が時間をさかのぼって逆伝播するようなイメージである。

f:id:satoshi19841011:20210507025606p:plain

RNNのイメージ
実装演習結果/サマリーと考察

  本講義の中で2進数の計算を行うRNNの実装演習があったので、実習結果について下記に示す。ここでは2進数の加算により桁が上がる現象を学習させ、正確に2進数の加算ができるよう学習させている。学習の初期段階では正確に推論(計算)できていない(10進数で93+97と表現される計算結果が255となってしまっている)が、学習を繰り返すことで正しく推論(計算)がなされている。

f:id:satoshi19841011:20210624231204p:plain

RNNの例(2進数の計算)(1/6)

f:id:satoshi19841011:20210624231251p:plain

RNNの例(2進数の計算)(2/6)

f:id:satoshi19841011:20210624231317p:plain

RNNの例(2進数の計算)(3/6)

f:id:satoshi19841011:20210624231344p:plain

RNNの例(2進数の計算)(4/6)

f:id:satoshi19841011:20210624231414p:plain

RNNの例(2進数の計算)(5/6)

f:id:satoshi19841011:20210624231450p:plain

RNNの例(2進数の計算)(6/6)

 

関連記事レポート

 RNNの事例について調べいていたところ、前回のレポートで記載したCNN(畳み込みニューラルネットワーク)とRNNを組み合わせた事例を見つけたので、その概要を示す。

 CNNとRNNを組み合わせた事例として、画像のキャプション生成が挙げられる。画像のキャプション生成とは、画像を入力データとして与えると、画像の内容を説明する、簡単なテキストを生成することをいう。モデル構築の流れとしては、学習済みのCNNで画像の特徴量を抽出するとともに、RNNの一種であるLSTM(次の章で概要を述べる。)でテキストの特徴量を抽出、さらにデコーダーでCNNとLSTMの特徴量を結合、最後に活性化関数(ソフトマックス関数)で次に来る単語を予測することで、画像の内容の説明文を生成するものである。

 深層学習の各手法は単独での活用のみならず、組み合わせることで様々な活用の可能性のある興味深い例であると考えられる。

lionbridge.ai

Section2:LSTN

要点等

 RNNには時系列を遡れば遡るほど、勾配が消失していくという問題(勾配消失問題)や勾配が層を逆伝播するごとに指数関数的に大きくなっていく問題(勾配爆発)がある。これを解決する方法として、RNNの構造自体を変えて解決したものがLSTMである。

 基本的なRNNは推論と重みの記憶を同じ中間層が保持していたが、LSTNではゲートが推論を行い、CECが記憶の機能を持つという分離した構造をとっている。  

f:id:satoshi19841011:20210507032233p:plain

LSTNモデルの定式化

【RNN課題】

 勾配消失および勾配爆発の解決方法として、勾配が1であれば解決できることになる。その際の課題は、入力データについて時間依存度に関係なく重みが一律になってしまう点であり、これではニューラルネットワークの学習特性が無いということになってしまう。

【入力ゲートと出力ゲート】

 入力、出力ゲートを追加することで、それぞれのゲートへの入力値の重みを、重み行列W,Uで可変可能とすることでRNNの問題を解決している。 

 LSTNのモデルを下記に示す。入力ゲートは入力に対して学習を行い、CECに記憶させる内容を示す。

f:id:satoshi19841011:20210507033403p:plain

LSTNモデルの入力ゲート

 出力ゲートでは、CECが自身の記憶を元に出力する結果について、どのように利用するかを決める機能を有する(出力ゲートは良い出力をするためにどうすればよいかを学習している)。 

f:id:satoshi19841011:20210507033441p:plain

LSTNモデルの出力ゲート

 入力ゲートと出力ゲートのみでは、CECは過去からの情報を全て保管(覚えておく)する必要があり、過去の情報が不要になっても削除することが出来ず、無駄に蓄積されてしまうという問題が生じる。その解決には、情報が不要になったタイミングで情報を忘却させる機能が必要になる。

 CECの情報を削除する役割を忘却ゲートに持たせることで、その解決を図っている。

f:id:satoshi19841011:20210507034753p:plain

LSTNモデルの忘却ゲート

 

Section3:GRU

要点等

 LSTMでは、パラメータ数が多く、計算負荷が高くなる問題があった。

そのため、パラメータを大幅に削減し、計算負荷低減しつつ、LSTMと同等またはそれ以上の制度を実現可能な構造:GRU(Gated Recurrent Unit)が考えられた。

f:id:satoshi19841011:20210507231546p:plain

GRUのイメージ
実装演習結果/サマリーと考察

 LSTMとCECが抱える課題について、各種ゲートを有することからパラメータ数も多くなり計算量も大きくなるという課題があった。特にCECの場合は勾配が1で学習能力がないという課題があり、そのため入力、出力、忘却ゲートにより学習機能を付与しているため複雑で計算等の多い構造になっている。

 LSTMとGRUの違いについて、LSTMにはCECがあるがGRUには無い一方、更新ゲートとリセットゲートがある。また、LSTMはパラメータが多い一方、GRUは少ないため、GRUの方が計算量が少ないという違いがある。

 

Section4:双方向RNN

要点等

 過去の情報だけでなく、未来の情報を加味することで、精度を向上させるためのモデルである。実用例としては文章の推敲や、機械翻訳などがある。双方向RNNのイメージは下記のとおりである。

f:id:satoshi19841011:20210508000002p:plain

双方向RNNのイメージ

 

Section5:Seq2Seq

要点等

 Seq2seqはEncoder-Decoderモデルの一種であり、機械対話や、機械翻訳などに使用されている。Seq2seqの全体像は下記のとおりである。

f:id:satoshi19841011:20210508000159p:plain

Seq2Seqのイメージ

Seq2seqでは以下の流れで処理が行われる。

① Encoder RNN

 ユーザーがインプットしたテキストデータを、単語等のトークンに区切って渡す構造である。文章を単語等のトークン毎に分割し、トークンごとのIDに分割(Taking)を行い、IDからトークンを表す分散表現ベクトルに変換(Embedding)という段階に分けられる。 

② Encoder RNN

 ベクトルを順番にRNNに入力していく段階である。Encoder RNNでの処理手順は、vec1をRNNに入力し、hidden stateを出力。次にhiddenstateと次の入力vec2をRNNに入力、hidden stateを出力する処理を繰り返していく。そして、最後のvecを入れたときのhiddenstateをfinalstateとして保存する。このfinalstateはthoughtvectorと呼ばれ、入力した文の意味を表すベクトルとなる。

 ③ Decoder RNN

Decoder RNNシステムがアウトプットデータを、単語等のトークンごとに生成する段階である。Decoder RNNでは、finalstate (thought vector) から、各トークンの生成確率を出力していく。final state をDecoder RNN のinitial state ととして設定し、Embedding を入力する。次に生成確率にもとづいてトークンをランダムに選ぶ(sampling)さらに、選ばれたトークンをEmbedding してDecoder RNN への次の入力とする。これらを繰り返し、得られたトークンを文字列になおす。

 

【Seq2seqの課題】

 Seq2Seqの課題は一問一答しかできない点である。問に対して文脈は考慮されず応答され続ける。この課題の解決方法として、以下に述べる「HRED」がある。
 【HRED】

HREDでは過去n-1 個の発話から次の発話を生成する。Seq2seqでは会話の文脈は考慮されない応答であったが、HREDでは、前の単語の流れに即して応答されるため、より人間らしい文章の生成が可能となる。

【HREDの構造】
HREDはSeq2SeqにContext RNNを加えたものである。Context RNNとは Encoder のまとめた各文章の系列をまとめて、これまでの会話コンテキスト全体を表すベクトルに変換する構造を持つものであり、これにより過去の発話の履歴を加味した返答が可能になる。一方、HREDには下記の課題が存在している。

 【HREDの課題】
HRED は確率的な多様性が字面にしかなく、会話の「流れ」のような多様性が無い。
同じコンテキスト(発話リスト)を与えられても、答えの内容が毎回会話の流れとしては同じものしか出せない。そのため、HRED は短く情報量に乏しい答えをしがちである。例えば、短いよくある答えである「うん」「そうだね」「・・・」などを選択する傾向になる。こうした課題を解決するために考案されたのが「VHRED」である。

【VHRED】

 VHREDとは、HREDにVAE(オートエンコーダーの一種)の潜在変数の概念を追加することでHREDの課題の解決を図ったものである。

【オートエンコーダー

  オートエンコーダとは教師なし学習の一つであり、学習時の入力データは訓練データのみで教師データは利用しない。オートエンコーダの具体例としてMNISTにおける数字画像の認識が挙げられる。

 オートエンコーダの構造について、入力データから潜在変数zに変換するニューラルネットワークをEncoderとし、逆に潜在変数zをインプットとして元画像を復元するニューラルネットワークをDecoderという。オートエンコーダーを利用するメリットは次元削減が行えることである(zの次元が入力データより小さい場合、次元削減とみなすことができる。)

 【VAE】
 通常のオートエンコーダーの場合、何かしら潜在変数zにデータを押し込めているものの、その構造がどのような状態かわからない。VAEはこの潜在変数zに確率分布z:N(0,1)を仮定したものであり、これにより、VAEはデータを潜在変数zの確率分布という構造に押し込めることを可能にしている。 

 端的に言えば、VAEはオートエンコーダーの洗剤変数に確率分布を導入したものといえる。

実装演習結果/サマリーと考察

  本講座内でseq2seqとHRED、VHREDの違いを回答する確認テストがあったので、その回答をもって考察としたい。

【回答】

 seq2seqは一問一答に対して処理ができる手法であり、ある時系列データからある時系列データを出力するものである。HREDはseq2seqの機構にそれまでの文脈の意味ベクトルを加えられるようにすることで文脈の意味を汲み取った文章の変換を可能にしたものである。VHREDはHREDが文脈に対し当たり障りのない回答しかしなくなったことに対して解決策としてVAEの考え方を取り入れることで、当たり障りのない回答ができるように改良したものである。

 

Section6:Word2Vec

要点等

 RNNでは、単語のような可変長の文字列をニューラルネットワークに与えることはできないため、固定長形式で単語を表す必要がある。

 例えば次のような文章が与えられた場合を考える。

(例)I want to eat apples. I like apples.

 この場合、辞書の単語数分だけベクトルが生成される(例の場合は7個の単語)

 {apples,eat,I,like,to,want}

ここで「Apples」を入力する場合は、入力層には以下のベクトルが入力される。

(apples のみ1:one-hotベクトルになる。)
-------------------
1...apples
0...eat
0...I
0...like
0...to

-------------------

 

文章を扱うときにone-hotベクトルで情報を使うと膨大なメモリ量が必要になり現実的ではない。そこで、現実的な計算速度をメモリ量で大規模データを処理、学習させるためword2vecでは、以下のような単語(ボキャブラリ数)✕単語ベクトルの次元数からなる重み行列で表現している。

f:id:satoshi19841011:20210626232943p:plain

word2vec1におけるone-hotベクトルの重み行列化

Section7:Attention Mechanism

要点等

 seq2seq の問題は長い文章への対応が難しいという課題があった。要はseq2seqでは対象となる文章が、2単語でも、100単語でも、固定次元ベクトルの中に入力しなければならないという課題である。そして、文章が長くなるほどそのシーケンスの内部表現の次元も大きくなっていく。

 そこで「入力と出力のどの単語が関連しているのか」の関連度を学習する仕組みを組み込み事で解決を図ろうとする試みがAttention Mechanismである。

 例えば、"I have a pen" という文章を日本語訳する場合、「a」は関連性が低く、逆に「I」という単語は「私」という単語(出力)との関連が強いと判断する」。

 

実装演習結果/サマリーと考察

  本講座内でRNNとword2vecとAttention Mechanismの違いについて回答する確認テストがあったので、その回答を考察事項としたい。

【回答】

 RNNは時系列データを処理するにに適したニューラルネットワーク、word2vecは単語の分散表現ベクトルを得る手法、seq2seqは一つの時系列データから別の時系列データを得る手法、Attention Mechanismは時系列データの中身に対して関連性に重みをつける手法をである。

 

深層学習day4

Section1:強化学習

要点等

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

f:id:satoshi19841011:20210627140732p:plain

強化学習のイメージ

 続いて強化学習の応用例(会社のマーケティングの例)を示す。

【会社のマーケティングの例】

 ◯ 環境:会社の販売促進部

 ◯ エージェント:プロフィールと購入履歴に基づいて、キャンペーンメールを送る顧客を決めるソフトウェア

 ◯ 行動:顧客ごとに送信、非送信のふたつの行動を選択

 ◯ 報酬:キャンペーンのコストという負の報酬とキャンペーンで生み出されると推測される売上という正の報酬を受ける。

 【強化学習と通常の教師あり、教師なし学習との違い】

 教師なし、あり学習では、データに含まれるパターンを見つけ出すおよびそのデータから予測することが目標である一方、強化学習は優れた方策を見つけることが目標である。最近は計算速度の進展により大規模な状態をもつ場合の強化学習を可能としつつある。また、「関数近似法」と「Q学習」を組み合わせた手法が登場している。

【Q学習】

 行動価値関数を、行動する毎に更新することにより学習を進める方法

関数近似法】

 価値関数(※1)や方策関数(※2)を関数近似する手法のこと

 ※1 価値を表す価値関数は状態価値関数と行動価値関数の2種類があり、状態の価値に注目する場合は「状態価値関数」、状態と価値を組み合わせた価値に注目する場合は、「行動価値関数」という。

 ※2 方策関数は方策ベースの強化学習手法において、ある状態でどのような行動を採るのかの確率を与える関数をいう。 

f:id:satoshi19841011:20210627140857p:plain

方策関数考え方

 【方策勾配法】

 方策をモデル化して最適化する手法(エージェントの行動確率をニューラルネットワークで表現する手法)であり、下記の式で表される。

f:id:satoshi19841011:20210627143229p:plain

勾配方策法の式

ここでεは学習率、J(θ)は最適化したい目的関数を指す。J(θ)の定義方法には「平均報酬」、「割引報酬和」がある。これらの定義に対応して、行動価値関数:Q(s,a)の定義を行う。さらに、J(θ)の微分値については下記の方策勾配定理を用いる。

f:id:satoshi19841011:20210627144042p:plain

方策勾配定理

Section2:AlphaGo

要点等 

AlphaGoとはディープラーニングを用いて作成された囲碁を行うプログラム(人工知能)である。AlphaGoのディープラーニングの学習は以下のステップで行われる(各ステップにおけるRollOutPolicyとPolicyNetの内容は後述)。

1 教師あり学習によるRollOutPolicyとPolicyNetの学習

2 強化学習によるPolicyNetの学習

3 強化学習によるValueNetの学習Alpha Go の学習

f:id:satoshi19841011:20210627020531p:plain

AlphaGoの学習イメージ

【PolicyNetの教師あり学習

 KGS Go Server(ネット囲碁対局サイト)の棋譜データから3000万局面分の教師を用意し、教師と同じ着手を予測できるよう学習を行う。具体的には、教師が着手した手を1とし残りを0とした19×19次元の配列を教師とし、それを分類問題として学習した。この学習で作成したPolicyNetは57%ほどの精度である。

【PolicyNetの強化学習

 現状のPolicyNetとPolicyPoolからランダムに選択されたPolicyNetと対局シミュレーションを行い、その結果を用いて方策勾配法で学習を行った。PolicyPoolとは、PolicyNetの強化学習の過程を500Iteraionごとに記録し保存しておいたものである。現状のPolicyNet同士の対局ではなく、PolicyPoolに保存されているものとの対局を使用する理由は、対局に幅を持たせて過学習を防ごうというのが主である。この学習をminibatch size 128で1万回行った。

f:id:satoshi19841011:20210627021451p:plain

PolicyNetの処理の流れ

【ValueNetの学習】

 PolicyNetを使用して対局シミュレーションを行い、その結果の勝敗を教師として学習した。教師データ作成の手順は

1 SL PolicyNet(教師あり学習で作成したPolicyNet)でN手まで打つ。

2 N+1手目の手をランダムに選択し、その手で進めた局面をS(N+1)とする。

3 S(N+1)からRLPolicyNet(強化学習で作成したPolicyNet)で終局まで打ち、その勝敗報酬をRとする。S(N+1)とRを教師データ対とし、損失関数を平均二乗誤差とし、回帰問題として学習した。

 この学習をminibatch size 32で5000万回行ったN手までとN+1手からのPolicyNetを別々にしてある理由は、過学習を防ぐためであると論文では説明されている

 この他、AlphaGoではコンピュータ囲碁ソフトでは現在もっとも有効とされている探索法であるモンテカルロ木探索による最善手の選択を行っている。

f:id:satoshi19841011:20210627021523p:plain

ValueNetの処理の流れ

 【AlphaGo(Lee) とAlphaGoZeroの違い】

 AlphaGo(Lee) とその後に登場したAlphaGoZeroとは学習において下記の違いがある。AlphaGoZeroは、

 ◯ 教師あり学習を一切行わず、強化学習のみで作成

 ◯ 特徴入力からヒューリスティックな要素を排除し、石の配置のみ

 ◯ PolicyNetとValueNetを1つのネットワークに統合

 ◯ Residual Net(※)を導入

 ◯ モンテカルロ木探索からRollOutシミュレーションをなくした。

 ※ ネットワークにショートカット構造を追加して、勾配の爆発、消失を抑える効果を狙ったもの。これにより、100層を超えるネットワークでの安定した学習が可能となった。

f:id:satoshi19841011:20210401111315p:plain

Alpha Go ZeroのPolicyValueNet

Section3:軽量化・高速化技術

要点等 

 深層学習は多くのデータを使用したり、パラメータ調整のために多くの時間を使用したりするため、高速な計算が求められる。そのため、複数の計算資源(ワーカー)を使用し、並列的にニューラルネットを構成することで、効率の良い学習を行いたい。その実現のため、データ並列化、モデル並列化、GPUによる高速技術は不可欠である。

【データ並列化】

 ◯ 親モデルを各ワーカーに子モデルとしてコピー

 ◯ データを分割し、各ワーカーごとに計算

 

f:id:satoshi19841011:20210401112951p:plain

データ並列化

 データ並列化は各モデルのパラメータの合わせ方により「同期型」と「非同期型」に分類される。

【同期型】

 各ワーカーが計算が終わるのを待ち、全ワーカーの勾配が出たところで勾配の平均を計算し、親モデルのパラメータを更新

f:id:satoshi19841011:20210401113033p:plain

データ並列化(同期型)

【非同期型】

 各ワーカーはお互いの計算を待たず、各子モデルごとに更新を行う。学習が終わった子モデルはパラメータサーバにPushされる。新たに学習を始める時は、パラメータサーバからPopしたモデルに対して学習していく。

f:id:satoshi19841011:20210401113058p:plain

データ並列化(非同期)

 処理のスピードは、お互いのワーカーの計算を待たない非同期型の方が早い。一方、非同期型は最新のモデルのパラメータを利用できないので、学習が不安定になりやすい特徴を持つ。そのため(現在は)、同期型の方が精度が良いことが多くデータ並列化の主流となっている。

【モデル並列化】

 親モデルを各ワーカーに分割しそれぞれのモデルを学習させ、全てのデータで学習が終わった後で、一つのモデルに復元する並列化の方式である。

f:id:satoshi19841011:20210401114657p:plain

モデル並列化

 モデルが大きい時はモデル並列化を、データが大きい時はデータ並列化をすると良い。特にモデル並列化はモデルのパラメータ数が多いほど、スピードアップの効率の向上が図れる。

GPUによる高速化】

 GPU及び関連するアーキテクチャの特徴は下記の通り。 

 ◯ GPGPU (General-purpose on GPU)

   元々の使用目的であるグラフィック以外の用途で使用されるGPUの総称

 ◯ CPU

   高性能なコアが少数•複雑で連続的な処理が得意

 ◯ GPU

  ・較的低性能なコアが多数

  ・簡単な並列処理が得意

  ・ニューラルネットの学習は単純な行列演算が多いため、高速化が可能

 【GPGPU開発環境】

 開発環境には大きくCUDAとOpenCLがある。それぞれの特徴は下記の通り。

 ◯ CUDA

  ・GPU上で並列コンピューティングを行うためのプラットフォーム

  ・NVIDIA社が開発しているGPUのみ使用可能

  ・Deep Learning用に提供されているため使いやすい

 ◯ OpenCL

  ・オープンな並列コンピューティングのプラットフォーム

  ・NVIDIA社以外の会社(Intel, AMD, ARMなど)のGPUからでも使用可能

  ・Deep Learning用の計算に特化しているわけではない。

以上の開発環境はDeep Learningフレームワーク(Tensorflow, Pytorch)内で実装されているため、指定することで使用できる。

【モデルの軽量化(概要)】

 モデルの軽量化とはモデルの精度を維持しつつパラメータや演算回数を低減する手法の総称である。メモリ負荷が高い(演算性能が求められる)、IoT環境など低メモリ、低演算性能での利用(実装)が必要な場合に特に必要となる。そのため、モデルの軽量化は計算の高速化と省メモリ化が必要なモバイル、IoT 機器と特に相性が良い手法になる。

 【軽量化の手法】

 軽量化の手法には下記の3つがある。

 ・量子化

 ネットワークが大きくなると大量のパラメータが必要なり学習や推論に多くのメモリと演算処理が必要となる。そのメモリと演算処理の削減を行うため、通常のパラメータの64 bit 浮動小数点を32 bit など下位の精度に落とす手法である。計算の高速化と省メモリ化を図れる一方、精度が低下する恐れがある(実際には、大きな精度の低下は見られない。ただし、量子化する際は極端に精度が落ちない程度に量子化するよう留意が必要である)。

 ・蒸留

 規模の大きなモデルの知識を使い、軽量なモデルを作成する(知識を継承させる)手法である。これにより推論に必要なメモリ、演算能力の削減出来る。知識の継承により、軽量でありながら複雑なモデルに匹敵する精度のモデルを得ることが期待できる

 蒸留は教師モデル(※1)と生徒モデル(※2)の2つで構成される。

 教師モデルの重みを固定し生徒モデルの重みを更新していく誤差は教師モデルと生徒モデルのそれぞれの誤差を使い重みを更新していくことで学習させていく。 

f:id:satoshi19841011:20210401131408p:plain

蒸留のイメージ

 ・プルーニング

 モデルの精度に寄与が少ないニューロンを削除することで、モデルの軽量化、高速化を図る手法である。

f:id:satoshi19841011:20210401131532p:plain

ニューロンの削減(圧縮)のイメージ

Section4:応用モデル

要点等 

【MobileNets】 

 MobileNets( Efficient Convolutional Neural Networks for Mobile Vision Applications)の概要は以下の通り。

【課題認識】
 ディープラーニングモデルは精度は良いが、その分ネットワークが深くなり計算量が増える。計算量が増えると、多くの計算リソースが必要で、お金がかかってしまうろいう課題があった。。

【MobileNetsによる解決】

 上記の課題を解決するため、ディープラーニングモデルの軽量化・高速化・高精度化を実現したのが、MobileNets(その名の通りモバイルなネットワーク)である。近年の画像認識タスクに用いられる最新のニューラルネットワークアーキテクチャは、多くのモバイルおよび組み込みアプリケーションの実行環境を上回る高い計算資源を必要とされるが一般的な畳み込みレイヤーは計算量が多いというデメリットがある。そこで、MobileNetsはDepthwise ConvolutionとPointwise Convolutionの組み合わせることで軽量化を実現した。

【Depthwise Convolutionの仕組み】
◯ 入力マップのチャネルごとに畳み込みを実施
◯ 出力マップをそれらと結合(入力マップのチャネル数と同じになる)

 → 通常の畳み込みカーネルは全ての層にかかっていることを考えると計算量が大幅に削減可能となる。各層ごとの畳み込みなので層間の関係性は全く考慮されない。通常はPW畳み込みとセットで使うことで解決される。

【Pointwise Convolutionの仕組み】
◯ 1 x 1 convとも呼ばれる(正確には1 x 1 x c)入力マップのポイントごとに畳み込みを実施する。(出力マップ(チャネル数)はフィルタ数分だけ作成可能(任意のサイズが指定可能)

f:id:satoshi19841011:20210507212220p:plain

MobileNetsのイメージ

【DenseNet】

 論文タイトル○Densely Connected Convolutional Networks. G. Huang et., al.2016○https://arxiv.org/pdf/1608.06993.pdfhttps://www.slideshare.net/harmonylab/densely-connected-convolutional-networks

【DenseNetsの概要】

 Dense Convolutional Network(DenseNet)は、畳込みニューラルネットワーク(以下、CNN)アーキテクチャの一種である。ニューラルネットワークでは層が深くなるにつれて、学習が難しくなるという問題があったが、Residual Network(以下、ResNet)などのCNNアーキテクチャでは前方の層から後方の層へアイデンティティ接続を介してパスを作ることで、この問題に対処した。DenseBlockと呼ばれるモジュールを用いた、DenseNetもそのようなアーキテクチャの一つである。

 DenseNetは次のような流れである。

● 初期の畳み込み

● Denseブロック

● 変換レイヤー

● 判別レイヤー

● 出力層に前の層の入力を足しあわせる

 ⇨ 層間の情報の伝達を最大にするために全ての同特徴量サイズの層を結合する

● 特徴マップの入力に対し、下記の方法で出力を計算

 ⇨ Batch正規化

 ⇨ Relu関数による変換

 ⇨ 3 x 3畳み込み層による処理

● 前スライドで計算した出力に入力特徴マップを足し合わせ

 ⇨ 入力特徴マップのチャンネル数がl x kだった場合、出力は(l+1) x k

第l層の出力をとした場合、kをネットワークのgrowth rateと呼ぶ

 ⇨ kが大きくなるほど、ネットワークが大きくなるため、小さな整数に設定

● Transition Layer○CNNでは中間層でチャネルサイズを変更し

 ⇨ 特徴マップのサイズを変更し、ダウンサンプリングを行うため、Transition Layerと呼ばれる層でDence blockをつなぐ

f:id:satoshi19841011:20210507212646p:plain

DenseNetのイメージ(1)

f:id:satoshi19841011:20210507212712p:plain

DenseNetのイメージ(2)

f:id:satoshi19841011:20210507212741p:plain

DenseNetのイメージ(3)

f:id:satoshi19841011:20210507212822p:plain

DenseNetのイメージ(4)

◯ DenseNetとResNetの違い

 ⇨ DenseBlockでは前方の各層からの出力全てが後方の層への入力として用いられる   

 ⇨ RessidualBlockでは前1層の入力のみ後方の層へ入力●DenseNet内で使用されるDenseBlockと呼ばれるモジュールでは成⻑率(Growth Rate)と呼ばれるハイパーパラメータが存在

◯ DenseBlock内の各ブロック毎にk個ずつ特徴マップのチャネル数が増加していく時、kを成⻑率と呼ぶ

 

【Batch Norm Layerとそれ以外の正規化】

 ● Batch Norm

  ⇨ ミニバッチに含まれるsampleの同一チャネルが同一分布に従うよう正規化

 ● Layer Norm

  ⇨ それぞれのsampleの全てのpixelsが同一分布に従うよう正規化

 ● Instance Nrom

  ⇨ さらにchannelも同一分布に従うよう正規化

f:id:satoshi19841011:20210507215026p:plain

各Normのイメージ

◯ H x W x CのsampleがN個あった場合に、N個の同一チャネルが正規化の単位

◯ RGBの3チャネルのsampleがN個の場合は、それぞれのチャンネルの平均と分散を求め正規化を実施(図の⻘い部分に対応)。チャンネルごとに正規化された特徴マップを出力。

 ⇨ ミニバッチのサイズを大きく取れない場合には、効果が薄くなってしまう。

f:id:satoshi19841011:20210507215351p:plain

BatchNormのイメージ

◯ Layer Norm○N個のsampleのうち一つに注目

 ⇨ H x W x Cの全てのpixelが正規化の単位

 ⇨ RGBの3チャネルのsampleがN個の場合は、あるsampleを取り出し、全てのチャネルの平均と分散を求め正規化を実施(図の⻘い部分に対応)。特徴マップごとに正規化された特徴マップを出力

 ⇨ ミニバッチの数に依存しないので、上記の問題を解消できると考えられる。

◯ Layer Normは、入力データや重み行列に対して、以下の操作を施しても、出力が変わらないことが知られている。

◯ 入力データのスケールに関してロバスト

◯ 重み行列のスケールやシフトに関してロバスト

f:id:satoshi19841011:20210507215543p:plain

LayerNormのイメージ

【Instance Norm】

 各sampleの各チャンネルごとに正規化

  Batch Normalizationのパッチサイズが1の場合と等価であり、コントラストの正規化に寄与する。画像のスタイル転送やテクスチャ合成タスクなどで利用される。

f:id:satoshi19841011:20210507215807p:plain

InstanceNormのイメージ

【Wavenet】

 ◯ 生の音声波形を生成する深層学習モデル

 ◯ Pixel CNN(高解像度の画像を精密に生成できる手法)を音声に応用したもの

 Wavenetのメインアイディア

 ◯ 時系列データに対して畳み込み(Dilated convolution)を適用

 ◯ Dilated convolution

  ・ 層が深くなるにつれて畳み込むリンクを離す

  ・ 受容野を簡単に増やすことができるという利点がある。

  ・ 右図では、Dilated = 1,2,4,8となっている。

f:id:satoshi19841011:20210507221342p:plain

Wavenetのイメージ

 

 深層学習を用いて結合確率を学習する際に、効率的に学習が行えるアーキテクチャを提案したことがWaveNet の大きな貢献の1 つ。

 提案された新しいConvolution 型アーキテクチャはDilated causal convolutionと呼ばれ、結合確率を効率的に学習できるようになっている。

 Dilated causal convolutionを用いた際の大きな利点は、単純なConvolution layer と比べてパラメータ数に対する受容野が広いことである。

Section5:Transformer

要点等

 Transformerは2017年6月に登場した機械翻訳を行うモデルである。その特徴は RNNを使わず、Attention Mechanismのみを使用することで、少ない計算量で機械翻訳を実現したものである。(英仏 (3600万文) の学習を8GPUで3.5日で完了したとされる)

f:id:satoshi19841011:20210508002147p:plain

transformerのイメージ

 TransformerのEncoder(エンコーダ)では、文脈を考慮して各単語のエンコードを行っている。

f:id:satoshi19841011:20210627022945p:plain

TransformerのEncoder(エンコーダ)


 Decoder(デコーダ)ではエンコーダと同じく6層の構造であり、 各層で二種類の注意機構(注意機構の仕組みはEncoderとほぼ同じ)がある。自己注意機構は生成単語列の情報を収集し、直下の層の出力へのアテンションを行う。この際、未来の情報を見ないようにマスクする。Encoder-Decoder attention - 入力文の情報を収集 しEncoderの出力へのアテンションを行う。

f:id:satoshi19841011:20210627023420p:plain

TransformerのDecoder(デコーダ
実装演習/関連レポート

 実装演習として本講座で配布されたTransformerのプログラムソースを実装、実行した結果を下記に示す。この際。機械翻訳を学習させるための訓練データは英語及び日本語であり、下記のとおりである。

【訓練データ①(英語)】

[['where', 'shall', 'we', 'eat', 'tonight', '?'], ['i', 'made', 'a', 'big', 'mistake', 'in', 'choosing', 'my', 'wife', '.'], ['i', "'ll", 'have', 'to', 'think', 'about', 'it', '.'], ['it', 'is', 'called', 'a', 'lily', '.'], ['could', 'you', 'lend', 'me', 'some', 'money', 'until', 'this', 'weekend', '?']]

【訓練データ②(日本語)】 

train_Y: [['今夜', 'は', 'どこ', 'で', '食事', 'を', 'し', 'よ', 'う', 'か', '。'], ['僕', 'は', '妻', 'を', '選', 'ぶ', 'の', 'に', '大変', 'な', '間違い', 'を', 'し', 'た', '。'], ['考え', 'と', 'く', 'よ', '。'], ['lily', 'と', '呼', 'ば', 'れ', 'て', 'い', 'ま', 'す', '。'], ['今週末', 'まで', 'いくら', 'か', '金', 'を', '貸', 'し', 'て', 'くれ', 'ま', 'せ', 'ん', 'か', '。']]

 最終的にTransformerによる機械翻訳のBLEUの翻訳精度スコアは約25.8であり、趣旨は明確であるものの文法上、重大なエラーがある水準であった(BLEUの翻訳精度スコアの解釈については下記のサイトを参照した。)。

cloud.google.com

f:id:satoshi19841011:20210627145957p:plain

Transformerの実装例(1/22)

f:id:satoshi19841011:20210627150033p:plain

Transformerの実装例(2/22)

f:id:satoshi19841011:20210627150054p:plain

Transformerの実装例(3/22)

f:id:satoshi19841011:20210627150119p:plain

Transformerの実装例(4/22)

f:id:satoshi19841011:20210627150142p:plain

Transformerの実装例(5/22)

f:id:satoshi19841011:20210627150207p:plain

Transformerの実装例(6/22)

f:id:satoshi19841011:20210627150229p:plain

Transformerの実装例(7/22)

f:id:satoshi19841011:20210627150253p:plain

Transformerの実装例(8/22)

f:id:satoshi19841011:20210627150416p:plain

Transformerの実装例(9/22)

f:id:satoshi19841011:20210627150447p:plain

Transformerの実装例(10/22)

f:id:satoshi19841011:20210627150515p:plain

Transformerの実装例(11/22)

f:id:satoshi19841011:20210627150541p:plain

Transformerの実装例(12/22)

f:id:satoshi19841011:20210627150604p:plain

Transformerの実装例(13/22)

f:id:satoshi19841011:20210627150638p:plain

Transformerの実装例(14/22)

f:id:satoshi19841011:20210627150708p:plain

Transformerの実装例(15/22)

f:id:satoshi19841011:20210627150730p:plain

Transformerの実装例(16/22)

f:id:satoshi19841011:20210627150753p:plain

Transformerの実装例(17/22)

f:id:satoshi19841011:20210627150847p:plain

Transformerの実装例(18/22)

f:id:satoshi19841011:20210627150819p:plain

Transformerの実装例(19/22)

f:id:satoshi19841011:20210627150930p:plain

Transformerの実装例(20/22)

f:id:satoshi19841011:20210627150945p:plain

Transformerの実装例(21/22)

f:id:satoshi19841011:20210627151012p:plain

Transformerの実装例(22/22)

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

要点等

 物体認識タスクには大きく「分類(classification)」(画像に対し単一または複数の クラスラベルを出力)、「物体検知」(Bounding Boxを出力)、「意味領域分割」(各ピクセルに対し単一のクラスラベルを出力)、「個体領域分割」(各ピクセルに対し単一のクラスラベルを出力)に区分される。 

f:id:satoshi19841011:20210627024225p:plain

物体認識タスクの分類

 物体認識タスクをニューラルネットワークに学習させるためには、タスクごとに適したデータセットを用いることが重要である。本講座では代表的なものとして下記の4つのデータセットが紹介された。

f:id:satoshi19841011:20210627024628p:plain

代表的なデータセット

 目的に応じたBox/画像の選択することが重要であり、それらに即したデータセットを選択することが必要である(データ数が多ければよいわけではない)。
 また、物体検出においてはクラスラベルだけでなく, 物体位置の予測精度も評価することが重要であり、そのための指標としてIoU(Intersection over Union)がある。

f:id:satoshi19841011:20210627025850p:plain

IoUの定義

【物体検知のマイルストーン

 物体検知のAlexNetの登場を皮切りに, 時代はSIFT(※1)からDCNN(※2)へと大きく変化(大幅な精度の向上)した。

 ※1 SIFT:Scale Invariant Feature Transform

 ※2 DCNN:Deep Convolutional Neural Network

 その後も様々な物体検知のフレームワークが登場し、物体検知の精度は向上し続けている。 

f:id:satoshi19841011:20210627030420p:plain

物体検知の代表的なネットワークとフレームワーク

SSD: Single Shot Detector】

 SSDとはDefault BOXという長方形の枠を用意し、検出したい物体の位置やクラスを予測するものである。SSDの例としてVGG16のネットワーク図を示す。

 

f:id:satoshi19841011:20210627031041p:plain

VGG16のネットワーク図

 【Semantic Segmentationの概略】

 Semantic Segmentationの概要図を下記に示す。下の例では入力した画像(犬と猫)に対して畳み込み層とプーリング層を介して最終的に21個のクラスの中から最も確率の高いクラス(ここでは犬と猫)に判別され、Up-samplingにより画像を拡大し、出力される(Up-samplingは受容野を広げるために行う)。 

f:id:satoshi19841011:20210508002531p:plain

Semantec Segmentationのイメージ

【U-Net】

 畳み込み後に逆畳み込みを行なった際、物体の位置情報は満足に復元できない場合に、これを解決するためにskip-conectionというステップを導入したものがU-Netである。U-Netの概要イメージを下記に示す。

f:id:satoshi19841011:20210627054625p:plain

U-Netの概要

【DeconvNet & SegNet】

 DeconvNetはVGGNetを元に画像サイズを大きくし受容野を大きくするためのDeconvolution networkを導入したのものである。

f:id:satoshi19841011:20210627055050p:plain

DeconvNet & SegNetの概要

【Dilated Convolution】

 Up-samplingの他にConvolutionの段階で受容野を広げる工夫としてDilated Convolutionがある。これにより畳み込み層の段階で画像を拡大している。

f:id:satoshi19841011:20210627053522p:plain

Dilated Convolutionのイメージ

実装演習

 day4の講義の中では配布されたプログラムソースを用いた実装演習はなかったが、day4用に配布されたプログラムソースを元に実習を実施したのでその結果を下記に記載する。

【線形回帰】

 keras(TensorFlow)を用いて線形回帰を実装した実習例を下記に示す。

 なお、当初プログラムソースを実装した際はエラーが起き、正常に実行されなかった。原因を確認したところ、自身の実行環境がTensorFlow2(TF2系)であることが原因であったようだ。そのため、TensorFlowの関数部分 "tf" を  "tf.compat.v1" に修正(追記)することで解決した。

f:id:satoshi19841011:20210627055819p:plain

線形回帰(1/3)

f:id:satoshi19841011:20210627060407p:plain

線形回帰(2/3)

f:id:satoshi19841011:20210627060439p:plain

線形回帰(3/3)

 次にTensorFlowを使用して単純パーセプトロンを実装した例を示す。

f:id:satoshi19841011:20210627060513p:plain

単純パーセプトロン(1/3)

f:id:satoshi19841011:20210627060715p:plain

単純パーセプトロン(2/3)

f:id:satoshi19841011:20210627060839p:plain

単純パーセプトロン(3/3)

 続いてmnist(数字画像)の識別を実装した例を示す。plotの一部にエラーが生じてしまったが、学習後の精度(accuracy)は0.98と高い精度が達成できていることが確認できた。

f:id:satoshi19841011:20210627060913p:plain

mnistの識別(1/4)

f:id:satoshi19841011:20210627060939p:plain

mnistの識別(2/4)

f:id:satoshi19841011:20210627060954p:plain

mnistの識別(3/4)

f:id:satoshi19841011:20210627061017p:plain

mnistの識別(4/4)

 最後に2進数の加算を学習し推論する実装(本講義のCNNの項目で実装したものをkeras等を用いて実装し直したもの)結果を示す。

f:id:satoshi19841011:20210627061430p:plain

2進数の加算(1/5)

f:id:satoshi19841011:20210627061655p:plain

2進数の加算(2/5)

f:id:satoshi19841011:20210627061719p:plain

2進数の加算(3/5)

f:id:satoshi19841011:20210627061755p:plain

2進数の加算(4/5)

f:id:satoshi19841011:20210627061825p:plain

2進数の加算(5/5)

 

深層学習day1,2【ラビット・チャレンジ(E資格)】

 

深層学習day1

Section1:入力層〜中間層

要 点

 入力層はニューラルネットワークに何かしらの入力を受け取る層である。また、入力に対して、ある「重み」を混ぜ合わせて変換した結果が入力される層を中間層という。入力と重みはそれぞれ行列で表現することができ、それらの内積を取ることで中間層への入力を計算することが出来る。また、上記の内積計算に「バイアス」という値を加えることも出来る。ニューラルネットワークでは、この「重み」と「バイアス」を学習によって調整していくことになる。

 入力層〜中間層は下記のように表現できる。

f:id:satoshi19841011:20210419155037p:plain

入力層〜中間層
実装演習結果/サマリーと考察

  Section1の講義ではいくつかの練習問題が示されたため、それらの内容について記述することで「サマリーと考察」としたい。

 1題目は動物の種類を分類するニューラルネットワークにおいて、何が入力になり得るかという問題である。講義における解答例では「体長」、「体重」、「ひげの本数」などが挙げられていた。解答例以外では、例えば「足の本数」、「手足と胴体の長さの比」などがあるのではと考える。

 講義での解答例を下記に示す。 

f:id:satoshi19841011:20210419160222p:plain

入力層〜中間層の例題(解答例)

 また、入力と重みの内積を計算し、バイアスを加算するPythonコードを示す課題については下記のコードのうち、「#総入力」部分が該当する。

f:id:satoshi19841011:20210419215243p:plain

入力層〜中間層(Pythonコード課題)

続いて中間層の出力を示すコードの該当箇所は下記のとおりである(#1層、#2層の思想出力部分が該当する。#2層、#3層の総入力は中間層への入力部分になる。)。

f:id:satoshi19841011:20210419220955p:plain

入力層の出力部分等

 

関連記事レポート

 本講義では動物の部位を入力値とする例を用いて説明されていたが、深層学習では様々な入力値が考えられる。例えば、MNIST等による手書き文字(数字)の識別では、手書きの数字の画像を用いて各ピクセルを入力として学習させている等、学習させたい対象により、様々な入力値が考えられる。

 

f:id:satoshi19841011:20210616163313p:plain

手書き文字(数字)を入力した際の入力層等

参考HP

ml4a.github.io

Section2:活性化関数

要 点

 活性化関数はニューラルネットワークの中間層、出力層で用いられる関数であり、各層の線形な入力(入力と重みの積とバイアス)に対し非線形な出力を行い、ニューラルネットワークの表現幅を広げるものである。活性化関数には下記のものが挙げられる。

 

 【中間層用の活性化関数】 

 ◯ ReLU関数

 ◯ シグモイド(ロジスティック)関数

 ◯ ステップ関数

 

【ステップ関数】

 ステップ関数はしきい値を超えたら発火する関数であり出力は1か0のみ。

 パーセプトロンで利用された関数であり、線形分離可能なものしか学習できず、現在はあまり使われていない。

 ステップ関数の数式とイメージは下記の通り。

f:id:satoshi19841011:20210331224851p:plain

ステップ関数の数式

f:id:satoshi19841011:20210331224918p:plain

ステップ関数のイメージ(グラフ)

シグモイド関数(ロジスティック関数)】

 0〜11の間を緩やかに変化する関数で、ステップ関数とは異なり、信号の強弱を伝えられることから、ニューラルネットワーク普及のきっかけとなった。一方、大きな値では出力の変化が微小なため、そのような場合、勾配消失問題が起きる。

  シグモイド関数の数式とイメージは下記の通り。

f:id:satoshi19841011:20210331225026p:plain

シグモイド関数の数式

f:id:satoshi19841011:20210331225447p:plain

シグモイド関数のイメージ(グラフ)

【ReLU関数】

 現在、最も使われている活性化関数である。シグモイド関数で起きる勾配消失問題の回避とスパース化によりニューラルネットワークの性能向上に寄与している。

 ※勾配消失問題、スパース化については「確率的勾配降下法」の項目で記述

 ReLU関数の数式とイメージは下記の通り。

 

f:id:satoshi19841011:20210331225926p:plain

ReLU関数の数式

f:id:satoshi19841011:20210331230019p:plain

ReLU関数のイメージ(グラフ)

【出力層用の活性化関数】

 ◯ ソフトマックス関数

 ◯ 恒等写像

 ◯ シグモイド関数(ロジスティック関数)

   (中間層用の活性化関数と同じ。)

 出力層の活性化関数の一覧は下図の通りである。また、回帰問題での誤差関数は二乗誤差、分類問題(二値分類、他クラス分類)では交差エントロピーを用いて計算する。

f:id:satoshi19841011:20210501122717p:plain

出力層の活性化関数と使用する誤差関数

 各誤差関数は下記の通り。

  f:id:satoshi19841011:20210501123224p:plain

 

【ソフトマックス関数】

 例えば、多値分類を行うアルゴリズムで、出力が確率的に何に分類されるかという問題に使われる。(例えば画像が猫である確率が0.6、犬である確率が0.3、ネズミである確率が0.1であるといった出力が考えられる。)

 

【恒等写像

 回帰問題で活性化関数として使われる。入力値をそのまま出力するため、計算的な意味はないが、コーディングする際には、何を出力層としているかを明示的に表現するためかと思われる。

 

シグモイド関数(ロジスティック関数)】

(中間層と同じであるため略)

実装演習結果/サマリーと考察

  活性化関数が用いられている該当箇所のコードを見つける課題があった。

ReLU関数については下記の箇所に当たる。ReLU関数自体は別ファイルからインポートしているため、そちらの該当箇所について他の活性化関数も含めて記載しておく。(複数ヶ所あるが、下記のように表現される。u1を入力としてz1を出力する。)

 
  z1 = functions.relu(u1)
 

 また、活性化関数は下記のように定義される。

 

# 中間層の活性化関数

# シグモイド関数(ロジスティック関数)
def sigmoid(x):
return 1/(1 + np.exp(-x))

# ReLU関数
def relu(x):
return np.maximum(0, x)

# ステップ関数(閾値0)
def step_function(x):
return np.where( x > 0, 1, 0)

 

# 出力層の活性化関数
# ソフトマックス関数
def softmax(x):
if x.ndim == 2:
x = x.T
x = x - np.max(x, axis=0)
y = np.exp(x) / np.sum(np.exp(x), axis=0)
return y.T

# シグモイド関数(ロジスティック関数)は中間層と同じ

# 恒等関数は入力をそのまま出力にしているだけ

考察結果

 取り扱う問題によって活性化関数を使い分ける必要があることがよくわかった。また、勾配消失問題等、活性化関数の選択により生じる諸問題については該当する講座で改めて理解を深めていきたい。

関連記事レポート

 活性化関数には講義で触れた前述の関数以外にも様々なものが考案されており、例えば下記のようなものがある。

 ◯ tanh関数

f:id:satoshi19841011:20210511163625p:plain

tanh関数(双曲線正接関数)

 微分の最大値が1であることから、シグモイド関数の課題である誤差逆伝搬法の入力層側で学習が進みづらくなる点が改善される。また、出力が−1〜1であることから中央値が0であることからシグモイド関数よりも収束しやすい。

 一方、入力の値が大きい場合に勾配消失が起きる課題は解決されない。

 

 ◯ lLeaky ReLU関数 

f:id:satoshi19841011:20210511164018j:plain

Leaky ReLU関数

f:id:satoshi19841011:20210511164102p:plain

Leaky ReLU関数の式

 Leaky ReLU関数は、ReLU関数に負の入力値が与えられた場合の勾配消失を防ぐため、x<0の範囲で小さな傾きを持たせた関数だが、あまり効果は無いようである。

 本関連記事レポートは下記のHPを参考にした。 

fresopiya.com

Section3:出力層

要 点

【出力層の役割】

 例えば、画像の動物が何であるかという多値分類の問題で、動物が何であるかを確率で表す等、解答に適した形で出力する役割(動物が猫である確率は0.6、犬である確率は0.4である等)

【誤差関数】

 実際にニューラルネットワークに学習を行わせるために必要な関数である。ニューラルネットワークの出力(動物の分類問題の確率など)と正解(訓練データ:正解の動物)と比較し、その誤差を2乗誤差で計算するものである。講義内で紹介された犬、猫、ねずみの分類問題のイメージ図を下に示す。

(1)は出力と訓練データを比較し誤差を考えるイメージ

f:id:satoshi19841011:20210430165416p:plain

誤差関数のイメージ(1)

(2)は誤差を計算するイメージ

f:id:satoshi19841011:20210430165619p:plain

誤差関数のイメージ(2)
実装演習結果/サマリーと考察

本講義内での課題をもって考察とする。

【誤差関数を計算する際、引き算ではなく2乗する理由】

 引き算だけでは、各ラベルでの誤差で正負両方の値が出てしまい、、全体の誤差を正しく表現できない(例えば+1と−1という誤差があった場合、合わせると誤差が無い(0)のように表現されてします。)そのため、2乗してそれらのラベルの誤差が全て正の値になるようにしている。

【1/2を掛ける意味】

 1/2自体に特に意味はない。ただ、誤差関数を微分した場合、係数が1になり、計算しやすいという利点があるため、1/2を掛けている。実際にニューラルネットワークに学習させるときに、誤差関数の微分が用いられる。

【実装演習結果】

 誤差関数はコーディング上は次のように表現される。ここでyは訓練データ、dは出力結果の値を表している。

 loss = functions.mean_squared_error(d, y)
 
また、本来分類問題では誤差関数にクロスエントロピー誤差を用いるため、
 loss = ceoss_entropy_error(d, y)
と表現され使われるが、本講義で詳細な説明はないため割愛する。 

考察結果

 誤差関数はニューラルネットワークで推論を行った結果と正解データとの比較結果をもとに適切に学習を行わせる上で重要な要素である。ニューラルネットワークでの学習は誤差関数での評価(計算された結果)をもとに適切な重みやバイアスを更新していくためである。誤差関数をもとにどのように、どの程度、重みやバイアスを更新していくかについては、後述の各種勾配降下法によって行われる。

 誤差関数には、本講義で取り上げられたもの以外に平均二乗対数誤差(Mean Squared Logarithmic Error)や平均絶対誤差(Mean Absolute Error)などがある。

 平均二乗対数誤差は適用したモデルにおいて、予測が実値を上回りやすくなるという傾向があることから、来客人数を予測するようなモデルに用いて、来客数を控え目に予想する際などに用いられる。

 

f:id:satoshi19841011:20210616173114p:plain

平均二乗対数誤差

 また、平均絶対誤差は下記の式で与えられ、外れ値に強いという特徴がある。

  

f:id:satoshi19841011:20210616173233p:plain

平均絶対誤差

参考HP

ai-trend.jp

関連記事レポート

 中間層の場合には活性化関数は様々な種類が確認できたが、出力層については講義で紹介された関数以外に顕著なものは見つからなかった(回帰の場合は恒等関数、二値問題ではシグモイド関数、多値分類ではソフトマックス関数を用いれば特に問題ないように感じた。)。

 中間層と同じであるが、下記HPを参考に本関連記事レポートを作成した。 

fresopiya.com

 Section4:勾配降下法

要 点

  勾配降下法は誤差E(w)を最小化するパラメータwを発見することであり、学習を通して誤差を最小化するニューラルネットワークを作成する基本となる手法である。

f:id:satoshi19841011:20210501123625p:plain

勾配降下法

【出力層の活性化関数】

 出力層と中間層の活性化関数の違いは、活性化関数の記事内容と一部重複するが、中間層では、しきい値の前後で信号の強弱を調整する役割であり、•出力層は信号の大きさ(比率)はそのままに変換して出力するものであり、分類問題の場合は出力は0〜1の範囲に限定し総和を1とするソフトマックス関数などが用いられる。こうした理由から、出力層と中間層で利用される活性化関数が異なっている。

 

【勾配降下法に類する手法】

 勾配効果法には3つある。勾配効果法、確率的勾配降下法、ミニバッチ勾配降下法である。勾配降下法はニューラルネットワークの目的である学習を通じて誤差(誤差関数)を最小化するための方法である。

 ◯ 勾配降下法

 ◯ 確率的勾配降下法

 ◯ ミニバッチ勾配降下法

 

 勾配降下法の学習率の決定、収束性向上には以下のアルゴリズムがよく利用されている(細部はDay2のレポートで記載)。

 ◯ Momentum

 ◯ AdaGrad

 ◯ Adadelta

 ◯ Adam

 

確率的勾配降下法のメリット】

 勾配降下法では全サンプルの平均誤差を用いて学習するのに対して、確率的勾配降下法ではランダムに抽出したサンプルを用いて学習させることなどから大きく下記の3点のメリットがある。

 ◯ データが冗⻑な場合の計算コストの軽減

 ◯ 望まない局所極小解に収束するリスクの軽減

 ◯ オンライン学習ができる。

    学習データが入ってくる度に都度パラメータを更新し、学習を進めていく方法

 

【ミニバッチ勾配降下法のメリット】

 ミニバッチ勾配降下法はランダムで分割したデータの集合(ミニバッチ)に属するサンプルの平均誤差をもとに計算しており、データの中からランダムにサンプルをとり誤差を計算する確率的勾配降下法と似ているが異なる方法である。

 このように分割することにより、確率的勾配降下法のメリットを損なわず、PUを利用したスレッド並列化やGPUを利用したSIMD並列化など計算機の計算資源を有効利用することが出来る。

実装演習結果/サマリーと考察

  勾配降下法のコードを回答する課題があった。前提として勾配降下法は下図の左側にある通り学習結果wに対し、学習率ηに誤差関数の微分(∇E)を掛けた値を引くことで学習するコンセプトである。ηの値が大きすぎると、誤差関数は最小値にたどり着かず、発散してしまう。逆にηの値が小さすぎると収束するまでに時間がかかったり、大域的な最適解ではなく、極小値で収束してしまうなどの問題がある。(ηの選び方などは以降の講座で触れられる。) 

f:id:satoshi19841011:20210430215418p:plain

勾配降下法の式

 上図の右側の∇Eの計算(誤差勾配の計算)には、数値積分(※)を用いて計算する方法があるが、各パラメータをそれぞれ計算するために、順伝搬の計算を繰り返す必要が有り計算負荷が大きい。その解決のため、後述する逆誤差伝搬法が用いられる。

 また、勾配降下法を改良するアルゴリズムとして下記のようなものが考案されている(細部は以降の後述する。)。

 ◯ Momentum

 ◯ AdaGrad

 ◯ Adadelta

 ◯ Adam

 勾配降下法の計算をもとに誤差関数が採用になるように重みwとバイアスbを更新して次の学習の周(エポック)に反映する。

f:id:satoshi19841011:20210430221340p:plain

誤差関数の最小化イメージ

考察結果

 勾配降下法はニューラルネットワークの重みを最適な値(誤差が小さくなる値)を計算する方法である。基本的な勾配降下法を改良する手法は複数存在するが、どれが最良というものではなく、対象とする問題に応じて適切な手法を実装するのが、計算量の削減や精度の向上に有効と考えられる。

関連記事レポート

 勾配降下法の各手法のメリット、デメリットについて纏められたサイトがあったので紹介する形でレポートとしたい。 

 例えば、最急降下法のメリットが、①解への到達が早いことが多い、②結果が安定する。デメリットが①メモリの使用量が多い、②局所解にハマりやすい、など各種法について比較する表形式で纏められており、ひと目で理解しやすく参考になるサイトである。 

nisshingeppo.com

Section5:誤差逆伝播

要 点

 誤差逆伝搬法は、算出した誤差(∇E)を出力層側から順に微分し、、前の層、前の層へと伝搬させる方法であり、最小限の計算で各パラメータでの微分値を解析的に計算手法である。数値積分を用いないため、計算負荷を下げることができる。

f:id:satoshi19841011:20210501231339p:plain

誤差関数の微分

 誤差(∇E)を誤差逆伝搬法を用いて解析的に計算するイメージである。前の層になるほど、関数の微分が連鎖率(チェインルール)に基づき合成されていることがわかる。 

f:id:satoshi19841011:20210501231609p:plain

誤差逆伝搬のイメージ
実装演習結果/サマリーと考察

 本講義内の確認テストの演習結果を記述する。

【確認テスト】

 誤差逆伝搬法では不要な再帰的処理を避けることができる。すでに行った計算結果を保持しているソースコードを抽出せよ。

【回答】 

 下図でハッチングしている delta2 = functions.d_mean_squared_error(d, y)で計算されたdelta2が、delta1 = np.dot(delta2, W2.T) * functions.d_sigmoid(z1)の計算に含まれており、再帰的処理を避けるため計算結果が保持されている。

 

f:id:satoshi19841011:20210620014718p:plain

確認テスト
考察結果

 誤差逆伝搬法を用いることで、無駄な再帰的な計算を避け、最小限の計算で各パラメータでの微分値を解析的に計算することができ、深層学習における重みの更新量を計算することが可能である。

関連記事レポート

 誤差逆伝搬法で用いる計算グラフはE資格の計算問題でもよく出題されるようである。その計算例については、下記の参考書の「5章 誤差逆伝搬法」でも具体的な計算例が取り上げられており参考になった。本講座で理論的な部分をおさたうえで、様々な例題を解くことで理解を深めることができると思う。 

www.oreilly.co.jp

 

深層学習day2

Section1:勾配消失問題

要 点

 勾配消失問題とは、誤差逆伝搬法が改装に進んでいくに連れて、勾配がどんどん緩やかになってしまうため、勾配降下法による更新では下位層のパラメータがほとんど変わらず、訓練(学習)が最適値に就職しなくなってしまう問題である。

f:id:satoshi19841011:20210501171711p:plain

勾配消失問題のイメージ

 

 勾配消失の解決方法として以下のアプローチがある。

【活性化関数の選択】

 勾配消失問題の回避方法として、活性化関数にReLU関数を用いることが有効  

【重みの初期値設定】

 重みの初期値設定として、①重みの要素を前の層のノード数の平方根で除算した値を重みの初期値として設定(Xavierの初期値設定、対象とする活性化関数はReLU関数、シグモイド関数、双曲線正接関数)、②重みの要素を前の層のノード数の平方根で除した値に対して√2をかけ合わせた値とする。以上の2点が有効とされる。  

【バッチ正規化】

 バッチ正規化とはミニバッチ単位で、入力値のデータの偏りを抑制する手法活性化関数に値を渡す前後に、バッチ正規化の処理を孕んだ層を加える手法である。

実装演習結果/サマリーと考察

 ここでは、勾配消失問題に対してバッチ正規化を行い学習させた実習成果を記載する。まずは、準備として複数の層を持つニューラルネットワークを作成する。 

f:id:satoshi19841011:20210620194837p:plain

複数の層をもつニューラルネットワーク(1/4)

f:id:satoshi19841011:20210620194902p:plain

複数の層をもつニューラルネットワーク(2/4)

f:id:satoshi19841011:20210620194926p:plain

複数の層をもつニューラルネットワーク(3/4)

f:id:satoshi19841011:20210620194944p:plain

複数の層をもつニューラルネットワーク(4/4)

 続いてシグモイド関数を用いて学習させた例を示す。この場合、学習させても正解率は上がらず学習が失敗した例となっている(学習過程は省略するが、正解率が11%程度でそれ以上は上がっていない)。

 

f:id:satoshi19841011:20210620195634p:plain

シグモイド関数を用いた学習例(1/3)

f:id:satoshi19841011:20210620195700p:plain

シグモイド関数を用いた学習例(2/3)

f:id:satoshi19841011:20210620195724p:plain

シグモイド関数を用いた学習例(3/3)

 次にXavierの初期値設定、対象とする活性化関数をシグモイド関数とした場合の例である。この場合は正常に学習が行われ、高い正解率が実現できている。

 

f:id:satoshi19841011:20210620200235p:plain

Xavierの初期値設定、シグモイド関数を対象とした場合(1/3)

f:id:satoshi19841011:20210620200258p:plain

Xavierの初期値設定、シグモイド関数を対象とした場合(2/3)

f:id:satoshi19841011:20210620200709p:plain

Xavierの初期値設定、シグモイド関数を対象とした場合(3/3)

考察結果

 大量の画像データ等を学習させる際、ミニバッチ化することによりコンピュータ(TPU、GPU、CPU)が一度に処理(学習)する量が少なくなり、必要な計算リソース等を小さくする降下が期待できる。この際、Xavierの初期値設定、対象とする活性化関数(ReLU関数、シグモイド関数、双曲線正接関数)を適切に設定することで高い正解率を実現することができる。 

Section2:学習律最適化手法

要 点

 学習率の決め方とは初期の学習率設定方法の指針・初期の学習率を大きく設定し、徐々に学習率を小さくしていく・パラメータ毎に学習率を可変させる学習率最適化手法を利用して学習率を最適化させる。

 【Momentum】

 Momentumは、①局所的最適解にはならず、大域的最適解となる。②谷間についてから最も低い位置(最適値)にいくまでの時間が早い、というメリットがある。

【AdaGrad】

 AdaGradは勾配の緩やかな斜面に対して、最適値に近づけるメリット有する一方、    学習率が徐々に小さくなるので、鞍点問題を引き起こす事があるというデメリット(課題)がある。

【RMSProp】

 RMSPropには、①局所的最適解にはならず、大域的最適解となる。②ハイパーパラメータの調整が必要な場合が少ない、という2つのメリットがある。

Adam】

 Adamは、モメンタムの過去の勾配の指数関数的減衰平均、RMSPropの過去の勾配の2乗の指数関数的減衰平均上記をそれぞれ孕んだ最適化アルゴリズムである。AdamはMomentum、RMSProp両方のメリットを有している。

実装演習結果/サマリーと考察

  単純な確率的勾配降下法SGD)で学習させた場合とMomentumで改良した場合の実装結果を下記に示す。単純なSDGの場合、バッチ正規化なしだと約11%程度、バッチ正規化ありで約72%の学習結果(正解率)であった。一方、Momentumを用いた場合は約93%の高い正解率を実現することが出来た。

f:id:satoshi19841011:20210621165059p:plain

単純な確率的勾配降下法SGD)(1/3)

f:id:satoshi19841011:20210621165145p:plain

単純な確率的勾配降下法SGD)(2/3)

f:id:satoshi19841011:20210621165223p:plain

単純な確率的勾配降下法SGD)(3/3)

f:id:satoshi19841011:20210621165246p:plain

単純な確率的勾配降下法SGD)計算結果(バッチ正規化なし)

f:id:satoshi19841011:20210621165326p:plain

単純な確率的勾配降下法SGD)計算結果(バッチ正規化あり)

f:id:satoshi19841011:20210621165359p:plain

Momentumで改良した場合の計算結果
考察結果

 学習率最適化手法には様々な手法があるが、どれが最善ということはなく、学習させる対象によって最適な方式を模索することが重要と考えられる。

関連記事レポート

 下記の参考書の「6章 学習に関するテクニック」では、本講義で説明のあった学習率最適化手法等について、そえぞれの特徴(どのように最適化されていくか)について図示するとともに、上手く収束しない場合の例示がなされており、それぞれのメリット、デメリットについて理解を深めることができた。

 

www.oreilly.co.jp

Section3:過学習

要 点

 過学習とは、テスト誤差と訓練誤差とで学習曲線が乖離することである。

f:id:satoshi19841011:20210401000559p:plain

過学習のイメージ

 過学習は重みが大きい値をとることで発生することがある。学習させていくと重みにばらつきが生じる。重みが大きい値は学習において重要な値であるが、重みが大きいと過学習が起きてしまう。その解決策として、誤差に対して正則化を加算することで重みを抑制する方法がある。つまり、過学習が起こりそうな重みの大きさ以下で重みをコントロールするとともに、適度に重みの大きさのばらつきを出すことが必要である。 

 過学習の回避方法として正則化手法がある。正則化手法とはネットワークの自由度(層数、ノード数、パラメータの値等)を制約する手法である。この正則化手法は過学習を防止する上で有用である。正則化手法にはL1、L2正則化ドロップアウトがある。

【L1、L2正則化

 正則化にはL1ノルムとL2ノルムがある。下の式のように誤差関数に正則化項(p=1のときL1正則化、p=2のときL2正則化)を足すことで過学習の防止を図る。

f:id:satoshi19841011:20210502010334p:plain

f:id:satoshi19841011:20210502010348p:plain

 さらに、L1正則化、L2正則化のイメージを下に示す。右がL1正則化、左がL2正則化のイメージである。L1正則化の場合は最終的にいくつかの重みは0になる、L2正則化の場合は0にはならないが、いくつかの重みが小さい値になる等の特徴がある。

f:id:satoshi19841011:20210502010908p:plain

L1、L2正則化のイメージ

 【ドロップアウト

 過学習の回避方法としてドロップアウトもある。ドロップアウトはランダムにノードを削除して学習させることで過学習を防止する手法である。さらにドロップアウトはランダムにノードを削除していることから様々な異なるモデルで学習させていると解釈できることから、モデルの精度向上にも効果がある。

f:id:satoshi19841011:20210502003026p:plain

ドロップアウトのイメージ
実装演習結果/サマリーと考察/考察結果

  過学習が起きると、訓練データを用いた正解率が高くなり、一見優れたモデルが構築できたように思えるが、評価データや実際に推論を行わせるための実データでの正解率が低くなってしまう。つまり、訓練データのみに最適化され汎用性がないモデルとなってします。これらの抑制には本講座で説明された正則化ドロップアウト等の手法により過学習の回避を図ることが重要である。

 ここでは実装演習として、あえて学習データを少なくして学習させ、過学習を起こさせた例を紹介する。 

 

f:id:satoshi19841011:20210620202846p:plain

過学習の例(1/4)

f:id:satoshi19841011:20210620202921p:plain

過学習の例(2/4)

f:id:satoshi19841011:20210620202943p:plain

過学習の例(3/4)

f:id:satoshi19841011:20210620203556p:plain

過学習の例(4/4)

 次にドロップアウトにより過学習を回避した例について紹介する。この際、上記のか学習の例と同じく学習データを削除した状態で試行した。ドロップアウトレシオ(ドロップアウトを含める割合)を0.01〜0.1の間で様々に変化させてみたが、それぞれ77%程度の正解率に収束した。

f:id:satoshi19841011:20210620204656p:plain

f:id:satoshi19841011:20210620204753p:plain

ドロップアウトの例:ドロップアウトレシオ0.01(2/4)

f:id:satoshi19841011:20210620204813p:plain

ドロップアウトの例:ドロップアウトレシオ0.01(3/4)

f:id:satoshi19841011:20210620204829p:plain

ドロップアウトの例:ドロップアウトレシオ0.01(4/4)

 また、ドロップアウトレシオを0.2に設定した場合の例を下記に示す。レシオ(比率)を上げすぎると正解率が大きく下がる失敗例である。

 

f:id:satoshi19841011:20210620205539p:plain

ドロップアウトの例:ドロップアウトレシオ0.2
関連記事レポート

 過学習を防止する方法としては、「機械学習」の講義で説明のあった「K分割交差検証」を有効な手段として挙げられる。ラビットチャレンジの「機械学習」での説明のほか、下記HP等でもイメージを用いた解説がなされており理解を深める上で有用と考えた。

products.sint.co.jp

 Section4:畳み込みニューラルネットワークの概念

要 点

 畳み込みニューラルネットワークは画像認識等で用いられるディープラーニングの手法である。その一連の流れは入力層(入力画像)から出力層(出力画像)まで下記のような流れで処理がなされる。 

f:id:satoshi19841011:20210511172234p:plain

畳み込みネットワークの概念図

代表的な画像識別のアルゴリズムであるLeNetの処理の流れは下記のようになっている。32☓32の画像を入力として畳み込み層とプーリング層で処理され、出力(画像認識、画像は何であるか)がなされる。

f:id:satoshi19841011:20210511172400p:plain

LeNetの構造図

 畳み込み層では画像(ここでは入力値)に対し、フィルターで何らかの演算を行い出力値とし、バイアスを加算、さらに活性化関数で演算した結果を出力値とする。

f:id:satoshi19841011:20210511172602p:plain

畳み込み層の全体像

 畳み込みネットワークのイメージは下記の通り。画像を入力値としたニューラルネットワーク構造であり、確率を出力とするイメージである(本レポートの最初にある犬と猫とネズミを判別する考え方と同じである。)。

f:id:satoshi19841011:20210511172740p:plain

全結合の学習

 畳み込み層でのフィルターでの演算、バイアスを加算する計算例を下記に示す(畳み込み層では、画像の場合、縦、横、チャンネルの3次元のデータをそのまま学習し、次に伝えることができる。)

f:id:satoshi19841011:20210511173003p:plain

畳み込み層におけるバイアス計算等

畳み込み層の演算では、入力データの周囲にパディングと呼ばれる固定のデータを埋め込む場合がある(出力データのサイズを調整するために埋め込む場合がある)。

f:id:satoshi19841011:20210511173213p:plain

畳み込み層におけるパディング

 また、フィルターを適用する位置の間隔をストライドと呼ぶ。

f:id:satoshi19841011:20210511173335p:plain

畳み込み層におけるストライド

f:id:satoshi19841011:20210511173540p:plain

畳み込み層におけるチャネル

 全結合層のデメリットとして、例えば画像の場合、縦、横、チャンネルの3次元データだが、1次元のデータとして処理されてしまい、RGBの各チャンネル間の関連性が、学習に反映されないということが挙げられる。

  プーリング層での演算について、フィルタとの演算結果(対象領域)のMaz値または平均値を出力値として扱う。

f:id:satoshi19841011:20210511173748p:plain

プーリング層の演算概念
実装演習結果/サマリーと考察/考察結果

 CNNを実装した例について下記に示す。畳み込み演算は下記のコードのうち”simple convolution network class”の中(# レイヤの生成 とコメントがある部分)で行われている。この際、畳み込み演算を高速化させるために"im2col"で2つの入力画像(4☓4)を4☓9の行列に変換する処理を行っている。

f:id:satoshi19841011:20210621012244p:plain

CNNの実装例(1/13)

f:id:satoshi19841011:20210621012312p:plain

CNNの実装例(2/13)

f:id:satoshi19841011:20210621012331p:plain

CNNの実装例(3/13)

f:id:satoshi19841011:20210621012354p:plain

CNNの実装例(4/13)

f:id:satoshi19841011:20210621012415p:plain

CNNの実装例(5/13)

f:id:satoshi19841011:20210621012450p:plain

CNNの実装例(6/13)

f:id:satoshi19841011:20210621012516p:plain

CNNの実装例(7/13)

f:id:satoshi19841011:20210621012537p:plain

CNNの実装例(8/13)

f:id:satoshi19841011:20210621012612p:plain

CNNの実装例(9/13)

f:id:satoshi19841011:20210621012636p:plain

CNNの実装例(10/13)

f:id:satoshi19841011:20210621012703p:plain

CNNの実装例(11/13)

f:id:satoshi19841011:20210621012726p:plain

CNNの実装例(12/13)

f:id:satoshi19841011:20210621012744p:plain

CNNの実装例(13/13)

 

Section5:最新のCNN

要 点

 最新のCNNの例としてAlexNetが挙げられる。ALexNetでは過学習を防ぐ施策・サイズ4096の全結合層の出力にドロップアウトを使用するという特徴がある。5層の畳み込み層及びプーリング層、3層の全結合層から構成され、ImageNetと呼ばれるデータセットを解くための畳み込みニューラルネットワーク(CNN)である。

f:id:satoshi19841011:20210511174059p:plain

AlexNetの構造
サマリーと考察/考察結果

 AlexNetは、画像認識のために、初めてCNN(畳み込みニューラルネットワーク)を取り入れたモデルである。画像認識には様々な手法が考案されているがAlexNetは比較的シンプルな構造である一方、画像認識の精度を大きく向上させたモデルと考えられる。

関連記事レポート

 先の章で述べた代表的な画像識別のアルゴリズムであるLeNetとAlexNetとの違いについて纏めておきたい。

 LeNetとAlexNetは両方とも畳み込み層とプーリング層を重ね、最後に全結合層を経由しており出力を行うものであり、この構造に大きな違いはない。しかし、AlexNetは以下の点がLeNetと異なっている。

◯ 活性化関数にReLU関数を用いている。

◯ LRU(Locl Response Normalization)という局所的正規化を行う層を用いている。

◯ ドロップアウトを使用している。

 また、AlexNetは2012年に大きな成果を上げたが、その後はさらに高精度な手法(2014年のGoogLeNet、2015年のResNetなど)が考案されている。これらについては次回のレポートで記載していきたい。

【参考文献】下記文献の「8章 ディープラーニング

 

www.oreilly.co.jp

 

機械学習【ラビット・チャレンジ(E資格)】

 

線型回帰モデル

要 点

 線型回帰とは回帰問題(ある入力(離散あるいは連続値)から出力(連続値、「目的関数」という。)を予測する問題)のうち、出力を直線で予測出来るものを指す。線型回帰モデルは線型回帰問題を解くための機械学習モデルの一つである。

 「線形回帰モデル」

  ・回帰問題を解くための機械学習モデルの一つ

  ・教師あり学習(教師データから学習)

  ・入力とm次元パラメータの線形結合を出力するモデル

f:id:satoshi19841011:20210202125903j:plain

 

 線型回帰モデルは教師データを有する「教師あり学習」に分類され、入力(説明変数)とm次元パラメータの線形結合を出力する。この際、線形結合とは入力(説明変数)と未知のパラメータの各要素を掛け算し足し合わせたものとして表される。

 入力(説明変数)は回帰曲線に誤差があると仮定し、出力(目的関数)に乗ずる未知のパラメータを推定するものである。この際、未知のパラメータの推定には最小二乗法が用いられる。

 線型回帰モデルは、1次元の入力の場合は単回帰モデル、2次元以上の場合は線形重回帰モデルと呼ばれる。

 データの分割とモデルの汎化性能測定

 本講義では機械学習で用いるデータを学習用データと検証用データに分ける工程についても説明された。

 ● データの分割

  ・ 学習用データ:機械学習モデルの学習に利用するデータ

  ・ 検証用データ:学習済みモデルの精度を検証するためのデータ

 ● データを分割する理由

  ・ モデルの汎化性能(Generalization)を測定のため

  ・ データへの当てはまりの良さではなく、未知のデータに対してどれくらい

   精度が高いかを検証するため

f:id:satoshi19841011:20210202130410p:plain

実装演習結果/サマリーと考察

  演習課題は、ボストンの住宅データセット(ボストン市の住宅価格)を用いた物件価格の推定である。ここで用いたデータセットは線型回帰モデルのテストセットとしてよく用いられるものである(データのレコード数は506、カラム数は14である)。

 問題はカラムのうち部屋数(=4)、犯罪率(=0.3)を用いた物件価格の推定である。

f:id:satoshi19841011:20210202130707p:plain

 

  Pythonで実装した線型回帰モデルによる価格の推定値は約4.24であった。

                             (プログラムソースのキャプチャを下に示す。)

f:id:satoshi19841011:20210127004930p:plain

f:id:satoshi19841011:20210127005010p:plain

f:id:satoshi19841011:20210127005047p:plain

線形回帰_画面キャプチャ

 考察として、与えられたデータセットに基づき、線型回帰は実装できたと考えられる一方、与えられたデータセットには説明関数に用いた部屋数に「4部屋」というデータはなく、講義でも言及のあった外挿問題が生じていると推察される。また、価格の推定値もデータセットに含まれるデータの値から大きく下回ることから、正しい予測値ではないと考えられる。

関連記事レポート

 上記の課題で取り上げられているボストンの住宅データセットは線形回帰モデルの検証用としてよく知られていることから、様々なHP、個人ブログで取り上げられている。例えば、下記のブログでは、ライブラリ(matplotlib)を用いてデータの回帰曲線を描画するなど、分析対象のデータを視覚的に表現しながら、ライブラリ(scikit-learn)の活用法、コーディングを紹介しており、参考になった。

qiita.com

非線形回帰モデル

要 点

 非線型回帰とは回帰問題(ある入力(離散あるいは連続値)から出力(連続値、「目的関数」という。)を予測する問題)のうち、出力を曲線で予測出来るものを指す。非線型回帰モデルは非線型回帰問題を解くための機械学習モデルの一つである。

 非線形回帰の目的関数の導出には、基底展開法が用いられる。基底展開法は回帰関数として、基底関数と呼ばれる既知の非線形関数とパラメータベクトルの線型結合を使用する。よく使われる基底関数としては、多項式関数、ガウス型基底関数などが挙げられる。

f:id:satoshi19841011:20210202131025p:plain

 非線形回帰モデルの場合も、未知パラメータは線形回帰モデルと同様に最小2乗法や最尤法による推定を行う。

 また、学習データに対して、十分小さな誤差が得られない「未学習」や、逆に誤差は小さいものの、モデルの検証に用いるテスト集合誤差との差が大きくなる「過学習」の問題があり、対策を施し、適切な表現力のモデルを構築することが必要である。その方法として、不要な基底関数の削除、正則化法などを取り入れる方法が有効である。

f:id:satoshi19841011:20210202131151p:plain

実装演習結果/サマリーと考察

 講座では非線形回帰の課題(ハンズオン)が明記されてなかったので、サマリーと考察として上記要点の補足事項と正則化法(罰則項:Ridge回帰、Lasso回帰)を用いて線形回帰モデルの改良の検証例を記載する。

 非線形回帰モデルは線型回帰モデルと同様に基底展開法を適用できるが、未学習、過学習という導出したモデルの表現力が低い場合(未学習)と高い場合(過学習)があり適切な表現のモデルとなるように「工夫」が必要である。そのための主要な方法には正則化法がある。正則化法は、モデルの複雑なに伴って値が大きくなる正則化項を課して、その値を最小化するものである。

     f:id:satoshi19841011:20210222233003p:plain

    f:id:satoshi19841011:20210222232834p:plain

 次に線形回帰モデルの実装で用いたボストンの住宅データセットを用いて、①線形回帰モデル、②線形回帰モデルにRidge推定量による罰則項を適用したモデル(Ridge回帰)、③線形回帰モデルにLasso推定量による罰則項を適用したモデル(Lasso回帰)を実装し、その精度の評価を行った。その結果、Ridge回帰によるモデルが最も精度が高く、Lasso回帰によるモデルと元に線形回帰モデルが概ね同等の精度になった(この際、訓練データを全データの70%、テストデータを30%に設定した。)。

 ①、②、③を実装したプログラムソースのキャプチャを下に示す。

f:id:satoshi19841011:20210222233833p:plain

線形回帰モデルの精度評価(1/2)

f:id:satoshi19841011:20210222233910p:plain

線形回帰モデルの精度評価(2/2)

f:id:satoshi19841011:20210222233945p:plain

Ridge回帰モデルの精度評価(1/2)

f:id:satoshi19841011:20210222234019p:plain

Ridge回帰モデルの精度評価(2/2)

f:id:satoshi19841011:20210222234045p:plain

Lasso回帰モデルの精度評価(1/2)

f:id:satoshi19841011:20210222234113p:plain

Lasso回帰モデルの精度評価(2/2)

 また、モデル構築時の学習データにない入力に対する予測性能を「汎化性能」といい、その検証方法として、 学習に使用したデータと同じデータを用いて、モデルの学習データへの当てはまりの良さを評価する方法がある。学習データを構築したモデルに入力て得られた出力の誤差(学習誤差)と、学習データにないデータ(検証データ)を入力して得られた誤差(検証誤差)を比較し評価する方法である。

 モデルの予測精度や誤り率を推定するための手法に「ホールドアウト法」がある。これは有限のデータを学習用とテスト用に分割して、モデルの構築(学習)と検証に使用するものである。しかし、手元に大量のデータがある場合を除き、良い性能評価が得られない。そのため、手元のデータから取り出す学習用データを変化させる「クロスバリデーション(交差検証)」と呼ばれる方法で、それぞれの学習、検証データを元に構築したモデルを検証する方法がある。こうして得られた各モデルの精度の平均をCV(モデルの汎化性能)と呼ぶ。CVの値が小さいほど汎化性能が高く優れたモデルといえる。

 ホールドアウト法とクロスバリデーションのイメージを下に示す。

f:id:satoshi19841011:20210202132051p:plain

ホールドアウト法イメージ

f:id:satoshi19841011:20210202132139p:plain

クロスバリデーションのイメージ

 また、学習誤差と検証誤差の導出のイメージを下に示す。

f:id:satoshi19841011:20210202131653p:plain

f:id:satoshi19841011:20210202131723p:plain

 

 さらに、機械学習のモデルにおける設定値、制限値などはチューニング・パラメータという。最適なチューニング・パラメータの算出には、グリッドサーチという手法がある。グリットサーチは、取り得るパラメータの組み合わせを試行していくことで最適なパラメータを走査する方法である(この他、パラメータの設定範囲、試行回数を指定して、その範囲内で無作為に抽出したパラメータから最適な組み合わせを走査するランダムサーチという方法もある。)

f:id:satoshi19841011:20210202132520p:plain

グリッドサーチのイメージ

   

関連記事レポート

 非線形回帰モデルに限らず、Pythonを用いた機械学習、特に回帰問題等のデータ解析に関する関連書籍を紹介する。下記の図書は本講義でも利用されているpandas、Numpyなどのライブラリについて体系的に解説、理解しやすい書籍と思料。私自身、人工知能分野の初学者なので十分に理解できているわけではないが、引き続き参照しつつ学習を進めていきたい。

www.amazon.co.jp

ロジスティック回帰モデル

要 点

 ロジスティック回帰モデルとは、ある入力(数値)からクラスに分類する問題(分類問題)の一つであり、教師データを有する「教師あり学習」の機械学習モデルである。

 また、出力をを確率として扱い、分類する上で任意の入力を0〜1の間の数値に変換、出力できるシグモイド関数が必要である。シグモイド関数微分シグモイド関数自身を用いて表現できるため計算も容易である。

f:id:satoshi19841011:20210202205837p:plain

シグモイド関数

f:id:satoshi19841011:20210202205908p:plain

シグモイド関数微分


 

 

 ロジスティック回帰モデルは、怪しい人物を検知する動画分析ソリューションなどでも活用されている。
















実装演習結果/サマリーと考察

 講義資料は、タイタニック号の乗客データのデータセットを用いたロジスティック回帰による分類問題があった。ここで用いたデータセットはロジスティック回帰モデルを含む分類アルゴリズムのテストセットとしてよく用いられるものである(データのレコード数は891、カラム数は11である)。      

  

 講義資料では「30歳男性の乗客が生き残れるか」という問題がである。まずは、よくKaggleコンペで取り上げられている生存確率の推定を題材に、性別と年齢を説明変数とし、訓練データとテストデータに分けた上で、モデルの精度(テストデータが適切に生存又は死亡に分類されるか)を検証してみた。

 

f:id:satoshi19841011:20210202132739p:plain

  Pythonで実装したロジスティック回帰モデルによる生存、死亡の分類の精度は約77%であった。

  続いて、構築した回帰モデルをもとに課題を検証した。

  「30歳」、「男性」の条件で分類したところ、「0」(死亡)に分類された。

  また、この際に死亡に分類される確率は約80%であった。

  

  (以下にプログラムソースのキャプチャ及びコードの概要を示す。) 

f:id:satoshi19841011:20210127111508p:plain

[5]、[58] 最初に必要なライブラリ、データセットを読み込む。データセット'titanic'はseabornに格納されているものを使用した。

[112] titanicに格納されているデータの最初の5行を試し表示させた。 

f:id:satoshi19841011:20210127111739p:plain

[99] データセット'titanic'からから性別’sex’及び年齢'age'を取り出した。これを目標変数Xとおいた。 

f:id:satoshi19841011:20210127111757p:plain

生存者"survived"を目的関数Yとおいた。 

f:id:satoshi19841011:20210127111811p:plain

[104]  X、Yを訓練データとテストデータに分割した。この際、テストデータの割合を0.2とした。

[108] ロジスティック回帰を用いることを宣言

[109] 訓練データを用いて学習

[110] テストデータを用いてモデルの精度を検証し、約0.77(77%)の精度を得た。

f:id:satoshi19841011:20210127160154p:plain

 

最後に、「30歳」、「男性」の条件で検証したところ、0(死亡)に分類された。

(死亡に分類される確率は約80%)

関連記事レポート

 Kaggleでは機械学習の初心者向けにタイタニック号の生存者予測のコンペティションが行われている。そのため、タイタニック号の生存者予測については、Kaggleほか、個人のブログでもソースコードの公開、解説記事が多く存在する。(例えば下記ホームページではcsv形式でデータセットも公開している。)

 今回、上記の課題を実施するにあたり、タイタニック号の乗客のデータセットの入手方法について検索したところライブラリ(seaborn)内に格納されていることを知った。過去にC言語などを学習した際の経験として科学技術計算等に用いるライブラリの入手や活用に対し、当時初心者として取っ付きにくく感じていたのとは対象的に、Pythonは実装のハードルは低く扱いやすいものと感じた。

 一方、理論(数学的な事項)を十分に理解せずとも便利なホームページを活用することで、ある程度の実装ができてしまい機械学習が分かった気になる。一方、それだけで進めていくと、モデルの結果の検証や修正の段階で行き詰まってしまうのではないかと感じた。コードの実装に合わせて理論を十分に理解出来るよう努める必要がある。  

www.kaggle.com

 また、本講義で学んだ訓練データとテストデータに分割して学習させる手法を用いて、線形回帰モデルの課題で用いたボストンの住宅データセットを題材に、データ全体のうち7割を訓練データとして学習した際に、モデルの精度がどの程度実現できるか検証してみた。

 以下に実行結果のキャプチャーを示す。最後に5つのテストデータの価格と学習したモデルを元にした予測データを出力しているが、概ね一致していることが確認できた。

 

f:id:satoshi19841011:20210203213414p:plain

f:id:satoshi19841011:20210203213450p:plain

f:id:satoshi19841011:20210203213508p:plain

f:id:satoshi19841011:20210203213605p:plain

f:id:satoshi19841011:20210203213627p:plain

主成分分析

要 点

 主成分分析とは、多変量データの持つ構造をより少数個の指標に圧縮することであり、計算量の減少を実現する手法である。データの次元を圧縮(少なく)することに伴う情報の損失を抑えることが必要であるが、2、3次元まで次元を圧縮すれば可視化も可能である。

f:id:satoshi19841011:20210202163806p:plain

次元圧縮のイメージ

 多変量データの情報の量を分散の大きさと捉え、線形変換後の変数の分散が最大となる射影軸を探索線形変換後の分散が最大になる投射軸を探索する。

 

f:id:satoshi19841011:20210202164218p:plain

f:id:satoshi19841011:20210202164100p:plain

投射軸のイメージ

 この際、変換後の分散は次の式で表される。さらに、ノルムが1になるよう制約条件を付した上で変換後の分散が最大になるようよう、ラグランジュ関数を用いて解く。

 

f:id:satoshi19841011:20210202164740p:plain

変換後の分散

f:id:satoshi19841011:20210202164922p:plain

目的関数と制約条件

 また、主成分分析の次元圧縮により情報量の損失は寄与率により評価できる。

 寄与率は第k主成分の分散の全分散に対する割合(第k主成分が持つ情報量の割合)を指し、1〜k主成分まで圧縮した際の情報損失量の割合を累積寄与率とおくとき、それぞれ次の式で評価できる。

 

f:id:satoshi19841011:20210202165556p:plain

左:寄与率、右:累積寄与率
実装演習結果/サマリーと考察

 本講義の実装演習は次の通りである。

 【設定】

  ・乳がん検査データを利用しロジスティック回帰モデルを作成

  ・主成分を利用し2次元空間上に次元圧縮 

f:id:satoshi19841011:20210202133525p:plain

 【課題】

  ・32次元のデータを2次元上に次元圧縮した際に、うまく判別できるかを確認 

 課題の結果、32次元のデータを用いたロジスティック回帰モデルによる判別の精度は約96%、主成分を利用し2次元に次元圧縮した場合は約93%であり、概ねうまく判別できたと考える。 

     以下にプログラムソースのキャプチャ及びコードの概要を示す。

 

f:id:satoshi19841011:20210129120114p:plain

[250] 必要なライブラリをインポートする。

   乳がんデータ('load_breast_canser')、主成分分析に必要なライブラリ(PCA)など。

[252] [253] 読み込んだ乳がんデータの項目を確認した。

 

f:id:satoshi19841011:20210129120138p:plain

 [255] 乳がんデータの項数を確認した(カラムに30個の説明関数があることを確認)。

 [257] [259] レコード数をカラム数を確認し、中身の確認をした。

f:id:satoshi19841011:20210129120153p:plain

[181] 目的関数の中身を確認した('malignant':悪性、'benign':良性 に分類され、それぞれ0、1で表現されていた)。 

 

f:id:satoshi19841011:20210129120208p:plain

[184] [185] 目的関数をY、説明関数をXとおいた。

[241] X,Yを訓練データとテストデータに分割した。この際、テストデータを1割に設定

[242] [243] ロジスティック回帰モデルを生成

f:id:satoshi19841011:20210129120232p:plain

[244] モデルの精度を確認。約96%の精度であった。

[245] 主成分を利用して2次元に圧縮することを宣言

[246] 説明関数のXの訓練データを2次元のデータに置き換え

[247] ロジスティック回帰モデルを生成することを宣言

f:id:satoshi19841011:20210129120249p:plain

[248] 2次元に圧縮したデータを元にロジスティック回帰モデルを生成

[249] 2次元に圧縮した訓練データと目的関数を用いてロジスティック回帰モデルの精度を確認。約92%の精度を実現していることを確認

 

 今回は主成分分析の次元圧縮のみを実施したが、今後は寄与率、累積寄与率の確認や視覚化も試行してみたい。 

関連記事レポート

 練習として、線形回帰モデルで題材にしたボストンの住宅データセットを元に主成分分析を用いて、そのモデルの精度を検証してみた。

 仮に主成分分析を行っても高い精度を確保できるのであれば、住宅価格を予測するための説明変数(犯罪率、税金など)には強い相関関係がある言える。

 結果としては精度は25%程度であり、説明変数間の相関性は低いと考えられる。一方、主成分分析により相関性の強さの評価は検証できたことから、今後、未知のデータの相関性を確認する際などに活用してみたい。

 以下にプログラムソース及び実行結果のキャプチャを示す。

f:id:satoshi19841011:20210203225551p:plain

f:id:satoshi19841011:20210203225608p:plain

f:id:satoshi19841011:20210203225623p:plain

f:id:satoshi19841011:20210203225642p:plain

f:id:satoshi19841011:20210203231104p:plain
アルゴリズム

要 点

 本講義では、分類問題のための機械学習手法としてk近傍法及びk-means(k平均法)について説明があった。新しいデータを追加した際に最も近傍にあるk個とり、それらがもっとも多く所属するクラスにkを識別する手法である。

k近傍法

 下にk近傍法のイメージを示す。kのとり方(何個のデータを取るか)により、分類が変わる場合がある。

f:id:satoshi19841011:20210202134231p:plain

k近傍法のイメージ

 kの値は一般に大きくするほど、分類の境界線は滑らかになる。

f:id:satoshi19841011:20210202134615p:plain

  k-means(k平均法)

 k-meansは、与えられたデータをk個のクラスタに分類する教師なし学習によるクラスタリング手法である。イメージとしては特徴の似たものをグループにするものである。

 

f:id:satoshi19841011:20210202135601p:plain

k-meansのイメージ

k-meansは次の手順で行う。

 ① 各クラスタ中心の初期値を設定

 ② 各データ点に対して、各クラスタ中心との距離を計算し、

  最も距離が近いクラスタを割り当て

 ③ 各クラスタの平均ベクトル(中心)を計算

 ④ 収束するまで②、③の処理を反復

この際、初期値の値が近すぎる場合などは上手くクラスタリングできない場合があり、初期値の設定に注意が必要

f:id:satoshi19841011:20210202135942p:plain

クラスタリングが上手く行かない場合のイメージ
実装演習結果/サマリーと考察

 講義資料には準備された人口データをもとにk近傍法により分類する課題が記載されていた。

f:id:satoshi19841011:20210202135049p:plain

k近傍法のハンズオン

 

 しかし、ラビット・チャレンジではハンズオン用のデータ保存先等が不明であったため、練習としてSklearnに含まれるワインのデータセットを元に、K平均法を用いたクラスタリングを実装した。13種類あるワインの説明変数(アルコール度数など)の中からアルコール度数と色彩強度を用いてワインを3種類(3個のクラスター)に分割し、可視化した。

 以下にプログラムソース及び実行結果のキャプチャを示す。

f:id:satoshi19841011:20210129152421p:plain

f:id:satoshi19841011:20210129152439p:plain

f:id:satoshi19841011:20210129152506p:plain

f:id:satoshi19841011:20210129152519p:plain

f:id:satoshi19841011:20210129152535p:plain

関連記事レポート

 練習として、iris(アヤメ)のデータセットを題材に「k近傍法」及び「決定木」を用いて正しく分類できるかを検証してみた。

 

「k近傍法」

 irisのデータセットの目的関数(irisの種類)は3種類であるので、正しく3個のクラスターに分類できるかどうかを確認した。

 結果として、K=3の場合、約98%の精度を得られた。またKの値は大きく取りすぎると精度が減少することも確認できた。(例えばデータ数の半数である75(=K)とおくと精度は約69%であった。)Kの値はハイパーパラメータとして適切な値を設定する必要があると考えられる。

 以下にプログラムソース及び実行結果のキャプチャを示す。

f:id:satoshi19841011:20210204012605p:plain

f:id:satoshi19841011:20210204012638p:plain

f:id:satoshi19841011:20210204012659p:plain

 (以下はK=75とした場合の精度を計算した画面キャプチャである。精度が約69%になっていることが確認できる。)

f:id:satoshi19841011:20210204012906p:plain

 

「決定木」

 k近傍法と同様にirisのデータセットの目的関数(irisの種類)3種類を正しく分類できるかどうかを確認した。

 決定木の深さを3とし、分類を行った結果約97%の精度(テストデータの割合=0.2の場合。割合を0.1にすると100%の精度)を得られた。

 以下にプログラムソース及び実行結果のキャプチャを示す。

f:id:satoshi19841011:20210208102249p:plain

f:id:satoshi19841011:20210208102310p:plain

サポートベクターマシン

要 点

 サポートベクターマシンSVM)とは、2クラス分類のための機械学習手法の一つであり、線形モデルの正負で2値分類するものである。

 SVMでは、線形判別関数ともっとも近いデータ点との距離をマージンといい、この値が最大となる線形判別関数を求めるという手法である。

f:id:satoshi19841011:20210202161734p:plain

SVMにおけるマージンのイメージ

 SVMはマージンを最大化することを目標なので目的関数は次のように表される。

f:id:satoshi19841011:20210202162119p:plain

 上記の式の分子は、マージン上のすべての点において1になり、その他の点では1より大きい値をとることから、目的   関数及びその制約関数は次のように表せられる。

f:id:satoshi19841011:20210202162720p:plain

 この目的関数を最適化問題として扱い、ラグランジュ未定乗数法で解く。

 SVMは2値分類する際に境界部分(分離超平面)のデータとしてサポートベクター

 (下図参照)のみを機械学習の学習データとして扱い、他のデータは不要になる。

 

f:id:satoshi19841011:20210202163504p:plain

サポートベクターのイメージ
実装演習結果/サマリーと考察

  講義資料では具体的な実装演習の明示がなかったため、練習としてsklearnに含まれるiris(アヤメ)データセットを元に、irisのデータ(花弁やがくの長さ、幅など)からirisの種類を判別するSVMモデルを作成した。

 レコード数150のデータに対し、データの半分を訓練データとして学習させたところ、50個のテストデータに対し、分類の精度は100%(50個すべて適切に分類)であった。

 以下にプログラムソース及び実行結果のキャプチャを示す。

 

f:id:satoshi19841011:20210129165653p:plain

f:id:satoshi19841011:20210129165734p:plain

関連記事レポート

 練習として、手書き文字のデータセット(0〜9)に対しSVMを適用し、正しく分類できるかを検証した。

 結論として全ての数字に対し、ほぼ100%の正解率(最も低い正解率は「9」の86%)が得られた。

 下記にプログラムソース及び実行結果のキャプチャを示す。

 

f:id:satoshi19841011:20210204002459p:plain

f:id:satoshi19841011:20210204002518p:plain

f:id:satoshi19841011:20210204002541p:plain

 

 

 

応用数学【ラビット・チャレンジ(E資格)】

第1章:線形代数

要 点

 本章は機械学習に必要な応用数学のうち線形代数学に係る内容が主題である。

 講義ではスカラー、ベクトルその計算方法等について概説したのち、特に下記の4項目(①〜④)について、説明と実習(例題演習)が行われた。

 

スカラー

 ・ いわゆる普通の数

 ・ +、ー、×、÷の演算が可能

 ・ ベクトルに対する係数になれる。

ベクトル

 ・ 「大きさ」と「向き」をもつ

 ・ 矢印で図示される。

 ・ スカラーのセットで表示される。

 行列

 ・ スカラーを表にしたもの

 ・ ベクトルを並べたもの(ベクトルのベクトル)

   ▶ ベクトルの変換に使う。

 

行列の積の計算

 行列の「行」×「列」から新たな行列成分を算出   f:id:satoshi19841011:20210218135918p:plain

 計算例

 f:id:satoshi19841011:20210218140019p:plain

単位行列

 掛けても掛けられても相手が変化しない「1」のような行列を単位行列という。単位行列とその計算例は下記の通り。

  f:id:satoshi19841011:20210218141020p:plain

逆行列

 逆数のように元の行列とかけることで「1」(単位行列)になるような行列。計算例は下記の通り。 

  f:id:satoshi19841011:20210218141059p:plain

① 固有値固有ベクトルの求め方

 ある正方行列Aに対して,以下の式が成り立つベクトルxと,係数λがあるとき、ベクトルxを固有ベクトル、λを固有値という。              

f:id:satoshi19841011:20210202090013p:plain

    

② 固有値分解の理解

  行列Aが固有値

            f:id:satoshi19841011:20210202090858p:plain

  対応する固有ベクトル

            \begin{align*}
    \vec{v_{1}}, \vec{v_{2}}, \dots\\ 
\end{align*}   

    を持つとき、固有値を対角線上に並べた行列(それ以外の成分は0)

           \begin{align*}
 A=\left(\begin{array}{ccc} 
    \lambda_{1} & {} & {}\\ 
    {} & \lambda{2} & {} \\
    {}&{}&{\ddots} 
    \end{array} \right) 
 \end{align*}

  と,それに対応する固有ベクトルを並べた行列

           \begin{align*}
 V=\left(\begin{array} {CCC}
    \vec{v_{1}}, & \vec{v_{2}} & \dots\\ 
    \end{array} \right) 
\end{align*}

  をおくとき、次が成り立つ。

           \begin{align*}
AV=VA
\end{align*}

  これを変形すると、次の式が得られる。

           \begin{align*}
A=VAV^{-1}
\end{align*}

  このように正方形の行列を上述の様な3つの行列の積に変換することを固有値分解

という。この変換によって行列の累乗の計算が容易になる等の利点がある。

 


③ 特異値・特異ベクトルの概要 / ④特異値分解の理解

 正方行列でない行列Mに対し、次のような固有ベクトルがあれば固有値分解できる。

  \begin{align*}
M \vec{v}=\rho \vec{u}\\
M^{T} \vec{u} = \rho\vec{v}
    \end{array} \right) 
 \end{align*}

    \begin{align*}
M=USV^{-1}
\end{align*}

 このとき、次が成り立つ。

\begin{align*}
MV=US,\\
M^{T}= VS^{T}\\
M=USV^{-1},\\
M^{T}=VS^{T}U^{-1}
\end{align*}

さらに、

\begin{align*}
MM^{T}=USV^{-1}VS^{T}U^{-1}=USS^{T}U^{-1}
\end{align*}

左辺を固有値分解すれば,その左特異ベクトルと特異値の2乗が求められる。

計算例を下記に示す。

f:id:satoshi19841011:20210202102908j:plain

 

 固有値固有ベクトル等の行列の計算方法自体は、やり方を覚えれば手計算でも難しくない印象である。一方、固有値分解の適用により、行列の累乗計算が容易になる等、計算機上の実装を見据えた行列の性質を理解しておくことの重要性を感じた。

関連記事レポート

 本章の内容は理系大学の1年生で履修する線形代数学の講義内容と多くの共通部分がある。そのため、インターネット上に様々な大学の講義資料があり、理論的に深堀したい場合は有用である(「線形代数 pdf 講義」などで検索すると多くの大学のHPでpdf形式の講義資料が公開されている。)。私自身も理系大学出身ではあるが、大分忘れている部分があり、復習を兼ねて閲覧した。

 また、計算結果の検算には下記にリンクを貼った"WolframAlpha"も活用した。今後、Python上で様々な計算を実装すると思うが、確認用として活用していきたい。

www.wolframalpha.com

www.wolframalpha.com

第2章:確率・統計

要 点

 本章は機械学習に必要な応用数学のうち統計学に係る内容が主題である。

 機械学習では大量のデータからの特徴の抽出・分析が必要であり、それらを理解する上で統計学の知識が不可欠である。講義では、「集合」、「確率」、「統計」について解説があった。

 「集合」

 講義では最初に基本的な「集合」の概念とその表現方法(和集合、補集合、それらを使用した集合の表現など)の説明と例題演習がなされた。内容的には高校数学の内容がメインである。集合に用いる記法やベン図を用いた表現を良く思い出す必要があると感じた。 

 「確率」

 講義では確率の定義に始まり、その計算方法について概要説明と実習(例題)が行われた。特に「条件付き確率」は前述に「集合」におけるベン図を併用することで視覚的に分かりやすくなることが示されていた。

f:id:satoshi19841011:20210202112618j:plain

 また、例題としてベイズ則を利用して、複数の条件下で特定の事象が発生する確率を計算した。

 例題ある街の子どもたちは毎日1/4の確率で飴玉をもらうことができ,飴玉をもらうと1/2の確率で笑顔になるという。その街の,笑顔な子どもが飴玉をもらっている確率を求めよ。(ただし,この街の子どもたちが笑顔でいる確率は1/3である。)

f:id:satoshi19841011:20210202112719j:plain

 

 「統計」 

 講義では統計のうち記述統計を主題として、関連する用語の定義、説明がなされた。具体的には、確率変数・確率分布、期待値、分散、標準偏差などである。これらは機械学習で大量のデータを分析する上で基礎となる考え方・定義である。 

f:id:satoshi19841011:20210202112831j:plain

f:id:satoshi19841011:20210202112852j:plain

 また、上記の確率分布には対象となるデータの種類、散らばり方などによりベルヌーイ分布(コインの裏表確率等)、マルチヌーイ分布(サイコロの目の確率等)、特に実用的な分布として二項分布、ガウス分布などがある。さらに、一部のデータ(標本)をもとに全体(母集団)を推定する上で必要となる指標(標本分散、不偏分散)の計算とその意味について理解した。

f:id:satoshi19841011:20210202112505j:plain



関連記事レポート

 本章の内容は理系大学の1〜2年生で履修する統計学の講義内容と多くの共通部分がある。そのため、インターネット上に様々な大学の講義資料があり、理論的に深堀したい場合は有用である(「統計学 pdf 講義」などで検索すると多くの大学のHPでpdf形式の講義資料が公開されている。)。統計学は理系大学の講義のみならず、データ分析の観点からビジネスの場でも注目されている。  

 

www.amazon.co.jp

第3章:情報理論

要 点

 情報理論では情報の表現方法(定義の仕方)を検討対象としている。

 講義では、単純な数量の比較ではなく数量の増加率を情報量の増加として説明し、この際の情報量について対数を用いて自己情報量という式で定義している。さらに自己情報量の期待値(講義では「情報の珍しさ」と表現)をシャノンエントロピーという式で示している。シャノンエントロピーでは、自己情報量とそれが起こる確率を掛けたものの総和で示されている。

 裏表のあるコイントスで例えると、情報量が最大になる値は0.5(裏表の確率が各0.5)である場合である。仮に情報量が0であれば、コインは常に表(又は裏)しか出ないことになり、コイントスにより得られる情報は0(情報量が0)ということになる。

 その他、同じ事象・確率変数であるのに関わらず確率分布が異なる場合の評価方法であるカルバック・ライブラ− ダイバージェンスや、交差エントロピーの考え方、計算式についても説明がなされた。

f:id:satoshi19841011:20210202112312j:plain

関連記事レポート

 情報量の考え方の理解を深めるため、関連するHP等を検索した。

 下記HPは講義にもあったコイントスの例のほか、「くじ引き」を例にした説明もあり、本講義の理解を深める上で有用であったと思う。また、今後Pythonを利用して機械学習等を実装することを考慮し、Pythonでの計算の実装を含め参考にしたい。

pystyle.info