192 Views
July 12, 24
スライド概要
AI・機械学習を勉強したい学生たちが集まる、京都大学の自主ゼミサークルです。私たちのサークルに興味のある方はX(Twitter)をご覧ください!
2024年度前期輪読会 #12 ゼロから作るDeep Learning 8.1-8.3 京都大学工学部理工化学科 1回生 岡本 和優 0
8.1 ネットワークをより深く 1
ディープラーニングとは何か ディープラーニングとは,層を深くしたディープなニューラルネッ トワークのことである。 →これまで扱ってきたネットワークの層を重ねるだけで,ディープ ラーニングを作ることができる。 たとえばVGG(後述)を参考にした以下のディープなCNNで手書 き数字認識を行うと, p.242 図8-2 99.38%の認識精度が実現できる。 2
認識精度を高める方法 ● アンサンブル学習 →複数のモデルを用いて予測を行う手法。 ● 学習係数の減衰 →具体的には6章で紹介されたAdaGrad。 ● Data Augmentation(データ拡張) →訓練画像の枚数をアルゴリズムによって増やす。 たとえば,回転・移動・一部分の切り出し・左右の反転・輝 度等の見た目の変化・拡大縮小など。 3
なぜ層を深くするのか 理論的にはそれほど多くのことが分かっていないが,大規模画像認 識コンペティションで上位の手法の多くはディープラーニングによ るものである。 層を深くすることの利点として分かっていることは ● 少ないパラメータで同等の表現力を達成できる(小さなフィル ターによる畳み込みを重ねると,広い領域のデータを扱える)。 ● 学習する問題を階層的に分解できるため,少ないデータで学習 を効率良く行える。 ● 階層的に情報を渡すことができるため,前の層が抽出した情報 を利用でき,効率良く学習することが期待できる。 4
8.2 ディープラーニングの小歴史 5
VGG VGGは畳み込み層とプーリング層から構成される基本的なCNNだ が,重みのある層(畳み込み層や全結合層)を全部で16層(ない し19層)重ねてディープにしている点が特徴である。 3×3の小さなフィルターによる畳み込み層を連続して行っている。 畳み込み層を2~3層連続し,プーリング層でサイズを半分にする ことを繰り返し行って,最後に全結合層を経由して結果を出力する。 p.251 図8-9 6
GoogLeNet GoogLeNetは基本的にはCNNと同じ構成だが,サイズの異なるフ ィルター(とプーリング)を複数適用し,その結果を適合するイン セプション構造を構成要素として持つ。 1×1の畳み込み層を用いてチャンネル方向にサイズを減らすことで, パラメータを削減し,処理を高速化している。 図は原著論文(1409.4842 (arxiv.org))から。 7
ResNet ResNetは入力データを出力データにそのまま合算するスキップ構 造を導入することで,層を深くすることによって生じる勾配消失の 問題を軽減させた。 スキップ構造は逆伝播のとき,勾配をそのまま流している。これに より,層を深くすることで勾配が小さくなる勾配消失が避けられる。 p.253 図8-12 8
スキップ構造で勾配消失が解消できる理由 スキップ構造で伝播される誤差は𝜕𝐿/𝜕𝑥,スキップ構造まで伝わっ てきた誤差が𝜕𝐿/𝜕𝐻だから,ここでの連鎖律は, 𝜕L 𝜕𝐿 𝜕𝐻 = × 𝜕𝑥 𝜕𝐻 𝜕𝑥 である。𝐻(𝑥) = 𝐹(𝑥) + 𝑥だから𝜕𝐻/𝜕𝑥は 𝜕H 𝜕(𝐹 𝑥 + 𝑥) 𝜕𝐹 = = +1 𝜕𝑥 𝜕𝑥 𝜕𝑥 となる。したがって, 𝜕L 𝜕𝐿 𝜕𝐹 𝜕𝐿 𝜕𝐹 𝜕𝐿 = × +1 = + 𝜕𝑥 𝜕𝐻 𝜕𝑥 𝜕𝐻 𝜕𝑥 𝜕𝐻 であり,これはスキップ構造がないときの誤差に,それまでに伝わ ってきた誤差をそのまま加えたものになる。 【図解解説】ResNetとはなにか?わかりやすく解説 #機械学習 – Qiitaを参照。 ResNetと 【 図解解説】 はなにか?わかりやすく 解説#機械学習– Qiita ResNetと 【 図解解説】 はなにか?わかりやすく 解説#機械学習– Qiita 9
8.3 ディープラーニングの高速化 10
GPUによる高速化 ディープラーニングは畳み込み層で多大な処理時間が費やされる。 →畳み込み層の演算を効率良く行うことが高速化のポイント。 畳み込み層の演算は大量の行列の積和演算に帰着できる。 →GPUは大量の並列的な演算を得意とするため,これを用いること で高速化が実現される。 GPUが並列的な演算を得意とする所以は,3次元のグラフィックス のポリゴンを移動・回転が行列演算に対応すること。 11
分散学習 複数のGPUや複数マシンで分散して計算を行うことで,ディープラ ーニングの学習を効率化できる。 分散学習をサポートしたフレームワークとして,TensorFlowや CNTKが本書では挙げられている。 「どのように計算を分散させるか?」は難しい問題だそう。 分散深層学習 @ NIPS'17 | PPT (slideshare.net)を参照。 「大規模分散学習≒巨大ミニバッチ」とのこと。 12
演算精度のビット削減 ディープラーニングは数値精度のビット数をそこまで必要としない ため,これを削減することで高速化できる。 →ニューラルネットワークは入力に少しノイズが加わっても出力が 変わらない性質,ロバスト性があるから。 コンピュータで少数を表現するには32ビットの単精度浮動小数点 数,64ビットの倍精度浮動小数点数(Pythonではこれが一般的) などのフォーマットがあるが,ディープラーニングにおいては16 ビットの半精度浮動小数点数でも問題なく学習できる。 13
Binarized Neural Networks Binarized Neural Networksは重みや中間データを1ビットで表現 する手法である(勾配は浮動小数点)。 重みと活性化値を+1,-1に以下の2つの手法で2値化している。 ● Deterministic(決定論的)Binarization ● Stochastic(確率論的)Binarization 【読解】 Binarized Neural Networks #CNN – Qiitaを参照。 14
hard sigmoid関数 Stochastic Binarizationでは,シグモイド関数を直線で近似した hard sigmoid関数が用いられている。 𝑥+1 𝜎 𝑥 = max(0, min(1, )) 2 15
16