技術本に定評のあるO'REILLY(オライリージャパン)によるディープラーニングの解説書。タイトルの通り、Scikit-learnのようなアルゴリズムライブラリを使わずに、自力でゼロからディープラーニングを実装できるようになります。
↑気になったらここからポチっと↑
見よう見まねで機械学習をやってきたので、後付けだけど機械学習について体系的に学んでみようの第四弾。考え方を解説してゴリゴリ実装していきます。解説はとても分かりやすいですが、内容的にエンジニア向けの本だと思います。
出力の強さを制御するバイアスについて解説されています。どの機械学習の本もまずはパーセプトロンを理解するところから始まるのです。
また、パーセプトロンを組み合わせてAND・OR・NAND・XORのような論理回路を構成できることが紹介されています。パーセプトロンを層状に積み重ねた多層パーセプトロンはこの性質を利用することで複雑な論理を表現可能であり、ディープラーニングの基本概念となっているのです。
解く問題に合わせて活性化関数を選択することが大事なのです。例えば、写真に写った人物の体重を予測するような場合は、身長と体重は概ね比例するので、線形の恒等関数を使うと良さそうです。また、Yes/Noを判定するような2値分類では、S字型のシグモイド関数を使うのが一般的です。
機械学習においては訓練データを正確に分類するために損失関数というものを定義し、二乗和誤差や交差エントロピー誤差などを最小化することでモデルを最適化します。例えば、二乗和誤差であれば各次元(数字なら10個)に対して、ニューラルネットワークによる出力と教師データの特徴の差の二乗を計算し、それを最小化することで正しく分類できるモデルを目指します。
モデルの最適化においては、複数の変数がある場合に他の変数を固定して1変数に対して微分を行う偏微分を行います。偏微分すると微分対象の変数について勾配が発生します。勾配の示す方向は関数の値が最小化する方向であり、そこが最適ポイントということになります。ただしグラフの形によっては複数の勾配の収束ポイント(鞍点:Saddle point)があり、誤って収束することもあるのです。
パーセプトロン間の関係を可視化する計算グラフという書き方を使って計算過程を見える化しながら、各関数をレイヤ(層)として実装することでレイヤの伝播だけでニューラルネットワークを表現するモデルを実際に作ることができます。
これを解決する工夫として、物体が何も力を受けなければ徐々に減速するようなモメンタムという変数や、パラメータの要素ごとに適応的に学習を行うAdaGrad(Adaptive Grad)、モメンタムとAdaGradを合わせたAdamという手法などがその効果を可視化しながら紹介されています。
また、過学習を抑制しつつ学習を早く進行させることができるバッチ正規化という手法についても概念・実装・効果が解説されています。実装としては、ニューラルネットワークのレイヤの間にバッチ正規化レイヤを入れるのが良いのです。
この問題を解決するのが全結合ではなく部分結合する構造の畳込みニューラルネットーワクです。畳込み層を使えば3次元の形状を保って処理できる点が大きなブレークスルーなのです。畳込み層はフィルターの役割を果たし、3次元データに対しては縦・横・奥行きの3種類のフィルターを使うことで人間の目で行われるような画像処理をコンピューター上で再現するのです。
また、ディープラーニングに必要な大量の計算を効率的に行うためにCPUではなく、GPUを使うとよいことも紹介されています。GPU (Graphic processing unit)はその名の通り、コンピューターゲームのグラフィック描画などを高速に行うための専用ハードです。CPUのコア数は普通のPCで2個・4個・8個くらいですが、GPUは数千個のコアを積んでおり、ディープラーニングで使われる積和演算の並列実行に適しています。GPUを作っている主な企業はAMDとNVIDIAですが、NVIDIA製GPUのほうがディープラーニングに向いているのだそうです。NVIDIAの昨今の急成長の背景にはディープラーニングやAI技術の進展があったのですね。
↓気になったらここからポチっと↓
↑気になったらここからポチっと↑
見よう見まねで機械学習をやってきたので、後付けだけど機械学習について体系的に学んでみようの第四弾。考え方を解説してゴリゴリ実装していきます。解説はとても分かりやすいですが、内容的にエンジニア向けの本だと思います。
この本を読むとわかること
全体的な章立てと概要はこんな感じです。パーセプトロン
複数の信号を入力として受け取り、1つの信号を出力するパーセプトロンの基本概念や、出力の強さを制御するバイアスについて解説されています。どの機械学習の本もまずはパーセプトロンを理解するところから始まるのです。
また、パーセプトロンを組み合わせてAND・OR・NAND・XORのような論理回路を構成できることが紹介されています。パーセプトロンを層状に積み重ねた多層パーセプトロンはこの性質を利用することで複雑な論理を表現可能であり、ディープラーニングの基本概念となっているのです。
ニューラルネットワーク
パーセプトロンにおいて入力値に基づいて出力を算出する際に使われる活性化関数の解説からスタートします。線形の恒等関数や、S字型で出力が0から1の範囲のシグモイド関数(ロジスティック関数)が代表的な活性化関数です。解く問題に合わせて活性化関数を選択することが大事なのです。例えば、写真に写った人物の体重を予測するような場合は、身長と体重は概ね比例するので、線形の恒等関数を使うと良さそうです。また、Yes/Noを判定するような2値分類では、S字型のシグモイド関数を使うのが一般的です。
ニューラルネットワークの学習
MNISTと呼ばれる手書き文字のデータセットを使って画像から特徴を抽出し、分類すること(手書き文字を識別すること)を実装します。データを訓練データとテストデータに分けて、訓練データでモデルを作ってテストデータで精度を検証します。機械学習においては訓練データを正確に分類するために損失関数というものを定義し、二乗和誤差や交差エントロピー誤差などを最小化することでモデルを最適化します。例えば、二乗和誤差であれば各次元(数字なら10個)に対して、ニューラルネットワークによる出力と教師データの特徴の差の二乗を計算し、それを最小化することで正しく分類できるモデルを目指します。
モデルの最適化においては、複数の変数がある場合に他の変数を固定して1変数に対して微分を行う偏微分を行います。偏微分すると微分対象の変数について勾配が発生します。勾配の示す方向は関数の値が最小化する方向であり、そこが最適ポイントということになります。ただしグラフの形によっては複数の勾配の収束ポイント(鞍点:Saddle point)があり、誤って収束することもあるのです。
誤差逆伝播法
入力層から出力層への順方向の伝播(計算)は概念としては正しいのですが、実装するとかなりの計算量が必要となり、計算に時間がかかってしまいます。この計算量の問題を解決するのが誤差逆伝播法で、出力層から逆算するようにして最適なモデルを短時間で見つけることができます。パーセプトロン間の関係を可視化する計算グラフという書き方を使って計算過程を見える化しながら、各関数をレイヤ(層)として実装することでレイヤの伝播だけでニューラルネットワークを表現するモデルを実際に作ることができます。
学習に関するテクニック
確率的勾配降下法では学習率(0.01や0.001)を掛けあわせて更新量で重みを減らしていき最適点を探索しますが、等方的でない関数(伸びた形状の関数)だと学習が非効率になるという欠点があります。これを解決する工夫として、物体が何も力を受けなければ徐々に減速するようなモメンタムという変数や、パラメータの要素ごとに適応的に学習を行うAdaGrad(Adaptive Grad)、モメンタムとAdaGradを合わせたAdamという手法などがその効果を可視化しながら紹介されています。
また、過学習を抑制しつつ学習を早く進行させることができるバッチ正規化という手法についても概念・実装・効果が解説されています。実装としては、ニューラルネットワークのレイヤの間にバッチ正規化レイヤを入れるのが良いのです。
畳込みニューラルネットワーク
全結合したニューラルネットワークの問題点はデータの形状が丸められてしまうことです。画像であれば縦・横・奥行きの3次元の情報がありますが、全結合層に入力するにはピクセル単位に横に並べた1次元データ(平面を分解した線)にする必要があり、人間が目で見るような画像処理ができません。この問題を解決するのが全結合ではなく部分結合する構造の畳込みニューラルネットーワクです。畳込み層を使えば3次元の形状を保って処理できる点が大きなブレークスルーなのです。畳込み層はフィルターの役割を果たし、3次元データに対しては縦・横・奥行きの3種類のフィルターを使うことで人間の目で行われるような画像処理をコンピューター上で再現するのです。
この章では、畳込み層による畳込み演算の具体的な計算方法・実装方法をイメージ図を含めて分かりやすく解説しています。また、フィルターからの出力を1つに集約するプーリング層についてもその効果と実装方法が紹介されています。
ディープラーニング
この章ではディープラーニングの最新研究が紹介されています。1枚の画像から複数の物体を検知する物体検出や、風景写真をゴッホ風の絵に加工するAI、架空の部屋や都市を自動生成する画像生成AIについて事例や考え方が解説されています。また、ディープラーニングに必要な大量の計算を効率的に行うためにCPUではなく、GPUを使うとよいことも紹介されています。GPU (Graphic processing unit)はその名の通り、コンピューターゲームのグラフィック描画などを高速に行うための専用ハードです。CPUのコア数は普通のPCで2個・4個・8個くらいですが、GPUは数千個のコアを積んでおり、ディープラーニングで使われる積和演算の並列実行に適しています。GPUを作っている主な企業はAMDとNVIDIAですが、NVIDIA製GPUのほうがディープラーニングに向いているのだそうです。NVIDIAの昨今の急成長の背景にはディープラーニングやAI技術の進展があったのですね。
↓気になったらここからポチっと↓