深層学習 Day1.2

<h1>深層学習 Day1</h1>



<h2>Section1 入力層〜中間層</h2>
<ol>
  <li>ニューラルネットワークとは
    <ul>
      <li>線型結合と非線形変換を繰り返す合成関数のこと。</li>
      <li>出もともとは脳のモデルとして考案されたもの。</li>
    </ul>
  </li>

  <li>入力層とは
    <ul>
      <li>深層学習において、最初の入り口となる層のこと。</li>
      <li>入力層は受け取った情報をそのまま中間層に渡す「伝搬する層」のこと。</li>
    </ul>
  </li>

  <li>中間層とは
    <ul>
      <li>入力層から情報を受け渡される中間の層のこと。</li>
      <li>深層学習において、隠れ層とも呼ばれている。</li>
    </ul>
  </li>

  <li>実装演習　Section1
    <ul>
      <li>下部に記載。</li>
    </ul>
  </li>

  <li>おまけ　中間層(隠れ層)はいくつが適切か
    <ul>
      <li>ニューロンの数を知るためのガイドライン
        <ol>
          <li>データを分類するために必要と予期される領域(決定境界)を描く。</li>
          <li>決定境界に帰着する境界を線の集合として表現する。</li>
          <li>選択された線の数は、第1隠れ層内の隠れニューロンの数を表す。</li>
        </ol>
      </li>
    </ul>
  </li>
</ol>



<h2>Section2 活性化関数</h2>
<ol>
  <li>活性関数とは
    <ul>
      <li>ニューラルネットワークにおいて、次の層への出力の大きさを決める非線形の関数のこと。</li>
      <li>入力値の値によって、次の層への信号のON/OFFや強弱を定める働きをもつ。</li>
    </ul>
  </li>

  <li>中間層用の活性化関数
    <ul>
      <li>ReLU関数</li>
      <li>シグモイド(ロジスティック)関数</li>
      <li>ステップ関数</li>
    </ul>
  </li>

  <li>ステップ関数(階段関数)
    <ul>
      <li>関数への入力値が0未満の場合には常に出力値が0、入力値が0以上の場合には常に出力値が1となるような関数のこと。</li>
    </ul>
  </li>

  <li>シグモイド(ロジスティック)関数
    <ul>
      <li>生物の神経細胞が持つ性質をモデル化したもの。</li>
      <li>単調増加性を持っている。</li>
      <li>0〜1の値をとる関数のこと。</li>
    </ul>
  </li>

  <li>RELU関数
    <ul>
      <li>関数への入力値が0以下の場合には出力値が常に0、入力値が0より上の場合には出力値が入力値と同じ値となる関数のこと。</li>
    </ul>
  </li>

  <li>実装演習　Section2
    <ul>
      <li>下部に記載。</li>
    </ul>
  </li>

  <li>おまけ　その他の活性化関数(中間層)
    <ul>
      <li>tanh関数</li>
      <li>Leaky Relu関数</li>
      <li>PReLU(Parametric ReLU)関数</li>
      <li>RReLU(Randomized ReLU)関数</li>
      <li>Selu(Scaled Exponential Liner Units)関数</li>
      <li>Elu(Exponential Linear Units)関数</li>
      <li>Maxout関数</li>
    </ul>
  </li>
</ol>



<h2>Section3 出力層</h2>
<ol>
  <li>出力層
    <ul>
      <li>結果を出力する層のこと。</li>
    </ul>
  </li>

  <li>出力層用の活性化関数
    <ul>
      <li>ソフトマックス関数</li>
      <li>恒等写像</li>
      <li>シグモイド(ロジスティック)関数</li>
    </ul>
  </li>

  <li>ソフトマックス関数
    <ul>
      <li>ロジスティック関数を複数の次元に一般化したもの。</li>
      <li>複数の出力値の合計が1.0（＝100％）になるように変換して出力する関数のこと。</li>
    </ul>
  </li>

  <li>恒等写像
    <ul>
      <li>引数として用いたのと同じ値を常にそのまま返すような写像のこと。</li>
    </ul>
  </li>

  <li>シグモイド関数
    <ul>
      <li>入力は実数であり、出力は0〜1の値をとる。</li>
      <li>単調増加関数である。</li>
      <li>シグモイド関数の微分は、シグモイド関数自身で表現することが可能である。</li>
      <li>尤度関数の微分をする際にシグモイド関数を有効利用することができる。</li>
    </ul>
  </li>

  <li>誤差関数(ガウスの誤差関数)
    <ul>
      <li>正規分布と密接に関係した関数のこと。</li>
    </ul>
  </li>

  <li>誤差関数　二乗誤差
    <ul>
      <li>回帰問題を解くためのニューラルネットワークの性能の悪さを出したいときによく使われる損失関数のこと。</li>
    </ul>
  </li>

  <li>誤差関数　交差エントロピー
    <ul>
      <li>2つの確率分布がどれくらい「離れているか」を表す指標のこと。</li>
      <li>分類問題の予測の正しさの指標のこと。</li>
    </ul>
  </li>

  <li>実装演習　Section3
    <ul>
      <li>下部に記載。</li>
    </ul>
  </li>

  <li>おまけ　二値分類と多クラス分類
    <ul>
      <li>二値分類
        <ul>
          <li>0か1の二値で分類を判断する分類のこと。</li>
          <li>二値分類に活性化関数としてシグモイド関数を使った場合、セットで使われる損失関数が基本的に決まっており、二値分類用の交差エントロピーが使われる。</li>
        </ul>
      </li>
      <li>他クラス分類
        <ul>
          <li>0か1だけでなく、多数の分類カテゴリーがあるような分類のこと。</li>
          <li>多クラス分類に活性化関数としてソフトマックス関数を使った場合、セットで使われる損失関数が基本的に決まっており、多クラス分類用の交差エントロピーが使われる。</li>
        </ul>
      </li>
    </ul>
  </li>
</ol>



<h2>Section4 勾配降下法</h2>
<ol>
  <li>深層学習の目的
    <ul>
      <li>学習を通して誤差を最小にするネットワークを作成すること。</li>
    </ul>
  </li>

  <li>勾配降下法
    <ul>
      <li>重みを少しずつ更新し、勾配が最小になる点を探索するアルゴリズムのこと。</li>
    </ul>
  </li>

  <li>最急降下法
    <ul>
      <li>関数の傾きのみから、関数の最小値を探索する連続最適化問題の勾配法のアルゴリズムの一つのこと。</li>
    </ul>
  </li>

  <li>バッチ勾配降下法
    <ul>
      <li>関数の傾き、すなわち1次導関数に着目して最小値を求める方法のこと。</li>
    </ul>
  </li>

  <li>確率的勾配降下法（SGD)
    <ul>
      <li>連続最適化問題に対する勾配法の乱択アルゴリズムのこと。</li>
    </ul>
  </li>

  <li>ミニバッチ勾配降下法
    <ul>
      <li>バッチ勾配降下法と確率的勾配降下法の中間を取った方法のこと。</li>
      <li>全データの誤差の和でもなく、１つのデータの誤差でもなく、いくつかのデータの誤差の和を使う方法のこと。</li>
    </ul>
  </li>

  <li>実装演習　Section4
    <ul>
      <li>下部に記載。</li>
    </ul>
  </li>

  <li>おまけ　よく使う勾配降下法アルゴリズム
    <ul>
      <li>Momentum</li>
      <li>AdaGrad</li>
      <li>Adadelta</li>
      <li>adam</li>
    </ul>
  </li>
</ol>



<h2>Section5 誤差逆伝播法</h2>
<ol>
  <li>誤差逆伝播法
    <ul>
      <li>お手本と出力を比較することで、重みwやバイアスbを修正していく学習手法のこと。</li>
      <li>計算結果（=誤差）から微分を逆算することで、不要な再帰的計算を避けて微分を算出できる。</li>
    </ul>
  </li>

  <li>偏微分
    <ul>
      <li>変数が複数ある場合に，1つだけを変数として扱い，他を定数として扱うこと。</li>
    </ul>
  </li>

  <li>連鎖律
    <ul>
      <li>複数の関数が組み合わさった 合成関数 を微分する際のルールのこと。</li>
    </ul>
  </li>

  <li>最急降下法
    <ul>
      <li>関数の傾きのみから、関数の最小値を探索する連続最適化問題の勾配法のアルゴリズムの一つのこと。</li>
    </ul>
  </li>

  <li>順伝播
    <ul>
      <li>層の値を入力層から出力層に向かって順番に計算していく過程のこと。</li>
    </ul>
  </li>

  <li>逆伝播
    <ul>
      <li>偏微分を出力層から入力層に向かって順番に計算していく過程のこと。</li>
    </ul>
  </li>

  <li>実装演習　Section5
    <ul>
      <li>下部に記載。</li>
    </ul>
  </li>

  <li>おまけ　勾配消失問題
    <ul>
      <li>誤差逆伝播法が下位層(出力層から入力層)に向かって進んでいくにつれて、勾配がどんどん緩やかになっていくため、勾配降下法による更新では下位層のパラメータはほとんど変わらず、訓練は最適値に収束しなくなること。</li>
    </ul>
  </li>
</ol>
<li>実装レポート</li>
![深層学習_Day1実装レポート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925727/73b8ac45-dc66-9dfb-3685-ca5e9527f4ad.png)

![深層学習_Day1実装レポート2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925727/41a4711c-53be-1cf7-ae19-8d1b35b6b95d.png)

<a href="https://study-ai.com/jdla/" target="_blank">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925727/87f30b8e-7ace-dccc-b438-f0e0fa83bf7d.png" target="_blank" /></a>



<h1>深層学習 Day2</h1>



<h2>Section1 勾配消失問題</h2>
<ol>
  <li>勾配消失問題
    <ul>
      <li>誤差逆伝播法が下位層(出力層から入力層)に向かって進んでいくにつれて、勾配がどんどん緩やかになっていくため、勾配降下法による更新では下位層のパラメータはほとんど変わらず、訓練は最適値に収束しなくなること。</li>
    </ul>
  </li>

  <li>勾配消失問題を解決する活性化関数　ReLU関数
    <ul>
      <li>関数への入力値が0以下の場合には出力値が常に0、入力値が0より上の場合には出力値が入力値と同じ値となる関数のこと。</li>
      <li>勾配消失問題の回避とスパース化に貢献することで良い成果をもたらしている。</li>
    </ul>
  </li>

  <li>重みの初期値設定　Xavier
    <ul>
      <li>活性化関数はReLU関数、シグモイド（ロジスティック）関数、双曲線正接関数等を使用する。</li>
      <li>重みの要素を、前の層のノード数の平方根で除算した値のこと。</li>
    </ul>
  </li>

  <li>重みの初期値設定　He
    <ul>
      <li>活性化関数はReLU関数を使用する。</li>
      <li>重みの要素を、前の層のノード数の平方根で除算した値に対し√２をかけ合わせた値のこと。</li>
    </ul>
  </li>

  <li>バッチ正規化
    <ul>
      <li>ミニバッチ単位で、入力値のデータの偏りを抑制する手法のこと。</li>
      <li>重みの要素を、前の層のノード数の平方根で除算した値に対し√２をかけ合わせた値のこと。</li>
    </ul>
  </li>

  <li>実装演習　Section1
    <ul>
      <li>下部に記載。</li>
    </ul>
  </li>

  <li>おまけ　勾配発散問題(勾配爆発問題)
    <ul>
      <li>勾配が大きくなりすぎて、コンピューターが処理できなくなる問題のこと。</li>
    </ul>
  </li>
</ol>



<h2>Section2 学習立最適化手法</h2>
<ol>
  <li>学習立最適化手法
    <ul>
      <li>モメンタム</li>
      <li>AdaGrad</li>
      <li>RMSProp</li>
      <li>Adam</li>
    </ul>
  </li>

  <li>モメンタム
    <ul>
      <li>誤差をパラメータで微分したものと学習率の積を減算した後、現在の重みに前回の重みを減算した値と慣性の積を加算する。</li>
    </ul>
  </li>

  <li>モメンタムのメリット
    <ul>
      <li>局所的最適解にはならず、大域的最適解となる。</li>
      <li>谷間についてから最も低い位置(最適値)にいくまでの時間が早い。</li>
    </ul>
  </li>

  <li>AdaGrad
    <ul>
      <li>誤差をパラメータで微分したものと再定義した学習率の積を減算する。</li>
    </ul>
  </li>

  <li>AdaGradのメリット
    <ul>
      <li>勾配の緩やかな斜面に対して、最適値に近づける。</li>
    </ul>
  </li>

  <li>AdaGradのデメリット
    <ul>
      <li>学習率が徐々に小さくなるので、鞍点問題を引き起こす事がある。</li>
    </ul>
  </li>

  <li>RMSProp
    <ul>
      <li>誤差をパラメータで微分したものと再定義した学習率の積を減算する。</li>
    </ul>
  </li>

    <li>RMSPropのメリット
      <ul>
        <li>局所的最適解にはならず、大域的最適解となる。</li>
        <li>ハイパーパラメータの調整が必要な場合が少ない。</li>
      </ul>
    </li>

    <li>Adam
      <ul>
        <li>モメンタムの、過去の勾配の指数関数的減衰平均のこと。</li>
        <li>RMSPropの、過去の勾配の2乗の指数関数的減衰平均のこと。</li>
      </ul>
    </li>

      <li>Adamのメリット
        <ul>
          <li>モメンタムおよびRMSPropのメリットを孕んだアルゴリズムである。</li>
        </ul>
      </li>

  <li>実装演習　Section2
    <ul>
      <li>下部に記載。</li>
    </ul>
  </li>

  <li>おまけ　その他の最適化手法
    <ul>
      <li>AdamW</li>
      <li>Adabound</li>
      <li>RAdam</li>
    </ul>
  </li>
</ol>



<h2>Section3 過学習</h2>
<ol>
  <li>過学習
    <ul>
      <li>テスト誤差と訓練誤差とで学習曲線が乖離すること。</li>
    </ul>
  </li>

  <li>正則化
    <ul>
      <li>ネットワークの自由度(層数、ノード数、パラメータの値等)を制約すること。</li>
      <li>正則化手法を利用して過学習を抑制する。</li>
    </ul>
  </li>

  <li>Weight decay(荷重減衰)
    <ul>
      <li>重みが大きい値をとることで、過学習が発生することがある。</li>
      <li>誤差に対して、正則化項を加算することで、重みを抑制する。</li>
    </ul>
  </li>

  <li>L1正則化(Lasso正則化)
    <ul>
      <li>正則化項（罰則項）として「L1ノルム」を採用した正則化のこと。</li>
    </ul>
  </li>

  <li>L2正則化(Ridge正則化)
    <ul>
      <li>正則化項（罰則項）として「L2ノルム」を採用した正則化のこと。</li>
    </ul>
  </li>

  <li>ドロップアウト
    <ul>
      <li>ランダムにノードを削除して学習させること。</li>
    </ul>
  </li>

  <li>実装演習　Section3
    <ul>
      <li>下部に記載。</li>
    </ul>
  </li>

  <li>おまけ　スパース正則化
    <ul>
      <li>ユニットの活性の割合をコントロールする正則化手法のこと。</li>
      <li>ハイパーパラメータとして、スパース正則化をどれくらい重要視するかを決める係数と活性の割合を設定する。</li>
    </ul>
  </li>
</ol>



<h2>Section4 畳み込みニューラルネットワークの概念</h2>
<ol>
  <li>畳み込み層
    <ul>
      <li>3次元の空間情報も学習できるような層が畳み込み層のこと。</li>
      <li>単純型細胞をモデルに考えられたもののこと。</li>

    </ul>
  </li>

  <li>パディング
    <ul>
      <li>入力画像のピクセルの周りにピクセルを囲むテクニックのこと。</li>
      <li>画像のサイズが変わらないようにする手法のこと。</li>
      <li>端の特徴量もしっかり捉えることができる。</li>
    </ul>
  </li>

  <li>ストライド
    <ul>
      <li>フィルタが画像を移動する間隔のこと。</li>
    </ul>
  </li>

  <li>チャンネル
    <ul>
      <li>各フィルタに対応する畳み込み層内のニューロンセットのこと。</li>
    </ul>
  </li>

  <li>全結合層
    <ul>
      <li>各プーリング層からの出力を通常のニューラルネットワークにつなぐ層のこと。</li>
    </ul>
  </li>

  <li>全結合で画像を学習した際の課題
    <ul>
      <li>RGBの各チャンネル間の関連性が、学習に反映されないこと。</li>
    </ul>
  </li>

  <li>プーリング層
    <ul>
      <li>複雑型細胞をモデル化したもののこと。</li>
      <li>入力画像におけるフィルタ形状の位置ずれを吸収するように機能する。</li>
    </ul>
  </li>

  <li>実装演習　Section4
    <ul>
      <li>下部に記載。</li>
    </ul>
  </li>

  <li>おまけ　全結合層
    <ul>
      <li> 畳み込みフィルタ層とプーリング層を通して特徴部分が取り出された画像データを一つのノードに結合し、活性化関数によって変換された値を出力する層のこと。</li>
    </ul>
  </li>
</ol>



<h2>Section5 最新のCNN</h2>
<ol>
  <li>AlexNet
    <ul>
      <li>5層の畳み込み層およびプーリング層など、それに続く3層の全結合層から構成されるモデルのこと。</li>
      <li>サイズ4096の全結合層の出力にドロップアウトを使用している。</li>
      <li>ヒルトン教授らのチームによって発表された物体認識のためのモデルのこと。</li>
      <li>物体認識のために、初めて深層学習の概念および畳み込みニューラルネットワークの概念を取り入れたアーキテクチャである。</li>
    </ul>
  </li>

  <li>AlexNetの特徴
    <ul>
      <li>活性化関数ReLU</li>
      <li>Max Pooling</li>
      <li>GPUの活用</li>
      <li>Data Augmentation(データ拡張)</li>
      <li>Dropout</li>
    </ul>
  </li>

  <li>実装演習　Section5
    <ul>
      <li>下部に記載。</li>
    </ul>
  </li>

  <li>おまけ　その他のCNN
    <ul>
      <li>ZFNet(2013年)</li>
      <li>GoogLeNet(2014年)</li>
      <li>VGGNet(2014年)</li>
      <li>ResNet(2015年)</li>
      <li>SENet(2017年)</li>
    </ul>
  </li>
</ol>
<li>実装レポート</li>
![深層学習_Day2実装レポート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925727/a68426d7-630d-7110-6c35-9ac05375af80.png)

![深層学習_Day2実装レポート2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925727/c0c7c32a-3255-bdc1-8089-90f2f9e142ea.png)

![深層学習_Day2実装レポート3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925727/b110053c-0eb5-c520-920e-270bac75c5f6.png)

![深層学習_Day2実装レポート4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925727/1724ee39-e41a-19c5-fd48-77aa5937ed29.png)