【メモ】ディープラーニングG検定公式テキスト


## メモです

<a href="https://www.shoeisha.co.jp/book/detail/9784798157559" target="_blank" rel="noopener noreferrer">深層学習教科書 ディープラーニング G検定（ジェネラリスト） 公式テキスト（一般社団法人日本ディープラーニング協会 浅川 伸一 江間 有沙 工藤 郁子 巣籠 悠輔 瀬谷 啓介 松井 孝之 松尾 豊）｜翔泳社の本</a>


## 第1章　人工知能（AI）とは



### 人工知能（AI）とは

- 人工知能とは何か

- 人工知能の大まかな分類

    - シンプルな制御プログラム
    - 古典的な人工知能
    - 機械学習を取り入れた人工知能
    - ディープラーニングを取り入れた人工知能

- AI効果

- 人工知能とロボットの違い

    

### 人工知能研究の歴史

 - 世界初のコンピュータの誕生
 - ダートマス会議
 - 人工知能ブームの研究と冬の時代
     - 第一次AIブーム（推論・探索の時代：1950-60）
     - 第二次AIブーム（知識の時代：1980）
     - 第三次AIブーム（機械学習・特徴表現学習の時代：2010）



## 第2章　人工知能をめぐる動向



### 探索・推論



- 迷路（探索木）
    - 場合わけ
    - 幅優先探索
        - メモリくう
    - 深さ優先探索
        - そんなメモリ食わない
- ハノイの塔
- ロボットの行動計画
    - プランニング
    - 前提条件、行動、結果
- ボードゲーム
    - アルファ碁
    - 効率よく探索するためのコストの概念
    - ヒューリスティックな知識
        - 知識や経験に基づきコストがかかり過ぎる探索を省略
    - Min-Max法
    - αβ法
- モンテカルロ法
    - プレイアウト



### 知識表現



- 人工無能（知識なしでも知性があるように感じる人間心理の不思議）
    - チャットボット
    - イライザ（ELIZA）
- 知識ベースの構築とエキスパートシステム
    - マイシン（MYCIN）
    - DENDRAL
- 知識獲得のボトルネック（エキスパートシステムの限界）
    - 専門家の暗黙的知識
- 意味ネットワーク
    - 概念をラベルのついたノードで表現
    - 「is-a」継承関係
        - 上位概念、下位概念
    - 「part-of」属性
- オントロジー
    - Cycプロジェクト
    - 存在論、概念化の明示的な仕様
- 概念間の関係
- オントロジーの構築
    - ヘビーウェイトオントロジー
    - ライトウェイトオントロジー
    - ウェブマイニング、データマイニング
- ワトソンと東ロボくん

### 機械学習・深層学習

- データの増加と機械学習

    - 機械学習とは人工知能のプログラム自身が学習する仕組み
    - サンプル数が多いほどいい
    - ビッグデータ

- 機械学習と統計的自然言語処理

    - 複数の単語をひとまとまりにした単位
    - コーパス（対訳データ）

- ニューラルネットワーク

    - 元祖は単純パーセプトロン

- ディープラーニング（深層学習）

    - ニューラルネットワークを多層にしたもの
    - バックプロパゲーション
    - 自己符号化器

- 新時代を切り開くディープラーニング

    - かつて特徴量を決めるのは人間だった

        

## 第3章　人工知能分野の問題



### 人工知能分野の問題

- トイ・プロブレム
    - コンピュータが扱えるように簡略化したもの
    - 現実世界の問題に対応できない
- フレーム問題
    - 今しようとしていることだけを選び出す事が難しい
- チューリングテスト
    - 別の場所にいる人間がコンピュータと会話し、相手がコンピュータと見抜けなければコンピュータには知能があるとする
- 強いAIと弱いAI
    - プログラムが人間の心を持つかどうか
    - 持てる派は「強い」、「弱い」派は「コンピュータは道具」
- シンボルグランディング問題
    - 記号とその対象がいかにして結びつくか
- 身体性
    - 知能が成立するには身体が不可欠であるという考え方
- 知識獲得のボトルネック
    - ルールベース機械翻訳
    - 統計的機械翻訳
    - ニューラル機械翻訳
- 特徴量設計
    - 注目すべきデータの選び方
    - 特徴表現学習
        - ディープラーニングは特徴表現学習を行う機械学習アルゴリズムの一つ
    - シンギュラリティー
        - 技術的特異点

## 第4章　機械学習の具体的手法



### 代表的な手法

- 学習の種類
    - 教師あり学習
    - 教師なし学習
    - 強化学習
- 教師あり学習
    - 与えられたデータをもとにそのデータがどんなパターンになるのか識別・予測
    - 回帰問題
        - 連続値を予測
    - 分類問題
        - 離散値を予測
- 教師なし学習
    - 教師（出力データ）なし
    - データそのものが持つ構造・特徴を学習
        - 売り上げデータから顧客層を把握
        - 入力データの各項目間の関係性を把握

#### 代表的な手法（教師あり学習）

- 線形回帰
    - 線形回帰に正則化項を加えた手法としてラッソ回帰、リッジ回帰
- ロジスティック回帰
    - 分類問題に使用
    - シグモイド関数
        - データが正例となるか負例となるか
        - 閾値を設定
    - ソフトマックス関数
- ランダムフォレスト
    - 決定木
    - 特徴量をランダムに選び出す
    - ブートストラップサンプリング
        - 決定木に対してランダムに一部のデータを取り出して学習に用いる
    - それぞれの結果を用いて多数決をとる
    - 複数のモデルで学習させるアンサンブル学習
    - 全体から一部のデータを用いて複数のモデルを用いて学習する方法をバギングという
- ブースティング
    - 一部のデータを繰り返し抽出し複数のモデルを学習させる
    - バギングは複数のモデルを一気に並列で作成、ブースティングは逐次的に作成
    - AdaBoost、勾配ブースティング、XgBoost
    - ランダムフォレストより精度はいいが時間がかかる
- サポートベクターマシン
    - SVM
    - 各データ点との距離が最大となるような境界線を求める事でパターン分類を行う
        - 距離を最大化することをマージン最大化という
    - 注意点
        - 扱うデータは高次元
        - データが線形分類できない
            - データを高次元に写像後、写像後の空間で線形分類を行う事で回避
            - 写像に用いる関数をカーネル関数、計算が複雑にならないよう式変形することをカーネルトリックという
- ニューラルネットワーク
    - 単純パーセプトロン
        - 入力層、出力層、重み
        - 層の間をどのように電気信号を伝播させるかを調整する活性化関数としてのシグモイド関数
        - 線形分類しか行えない
    - 多層パーセプトロン
        - 入力層と出力層の間に追加された隠れ層
        - 誤差逆伝播法



#### 代表的な手法（教師なし学習）



- k-means
    - データをk個のグループに分ける
    - 元のデータからグループ構造を見つけ出し、それぞれをまとめる
    - k個は人間が設定する
    - グループは正しくは「クラスタ」
    - クラスタ分析
    - 得られたクラスタがどういうものなのかは人間が解釈
- 主成分分析
    - データの特徴量間の関係性（相関）を分析することでデータの構造を掴む
    - 特徴量の多い場合に用いられる
    - 相関を持つ多数の特徴量から相関の少ない少数の特徴量へ次元削減する事が主たる目的
    - 得られた少数の特徴量を主成分という



### 手法の評価

- データの扱い
    - モデルの評価は未知のデータに対しての予測能力を見る事で行う
    - 未知のデータをどう準備するか？
    - 擬似的に未知のデータを作り出す
    - データを分割して評価することを交差検証という
        - 訓練データ：学習に用いる
            - 検証データ：訓練データをさらに分割する場合あり。テストデータでの評価前にモデルの評価を行う
        - テストデータ：評価に用いる
    - ホールドアウト検証
        - 事前にデータを分割する
        - たまたまテストデータに対して評価が良くなる可能性がある
    - k-分割交差検証
        - データの分割を複数回行い、それぞれで学習・評価を行う
- 評価指数
    - 混同行列
        - 真陽性（TP）
            - 陽性と予測して実際に陽性
        - 偽陰性（FN）
            - 陰性と予測して実際は陽性
        - 偽陽性（FP）
            - 陽性と予測して実際は陰性
        - 真陰性（TN）
            - 陰性と予測して実際に陰性
    - 指標
        - 正解率（accuracy）
            - 全データ中どれだけ予測が当たったか
            - (TP+TN)/(TP+TN+FP+FN)
        - 適合率（precision）
            - 正と予測したもののうち、実際に正であったものの割合
            - (TP)/(TP+TN)
        - 再現率（recall）
            - 実際に正であるもののうち、正と予測できたものの割合
            - (TP)/(TP+FN)
        - F値（F measure）
            - 適合率と再現率の調和平均
            - (2 * precision * recall)/(precison + recall)
    - テストデータを用いて評価を行う
        - 訓練データに対してのみ最適化されることをオーバーフィッティングという
    - 正則化を行い、訓練データにのみ調整されることを防ぐ
        - 過度の正則化により全体の汎化性能（予測性能）が下がることをアンダーフィッティングという
    - L1正則化
        - 一部のパラメータの値をゼロにし特徴選択ができるようにする
        - 線形回帰に対して適用した手法はラッソ回帰と呼ばれる
    - L2正則化
        - パラメータの大きさに応じてゼロに近づける事で汎化された滑らかなモデルを得る
        - 線形回帰に対して適用した手法はリッジ回帰と呼ばれる
    - Elactic Net
        - ラッソ回帰とリッジ回帰を組み合わせたもの

## 第5章　ディープラーニングの概要



### ニューラルネットワークとディープラーニング



- 多層パーセプトロン
    - ニューラルネットワーク
    - 入力と出力の関係性が隠れ層の中に重みとして表現されている
    - 隠れ層は入力と出力を対応づける関数
    - 単純パーセプトロンに関数が追加され非線形分析ができるようになった
- ディープラーニングとは
    - 隠れ層を増やしたニューラルネットワーク
    - ディープラーニングはニューラルネットワークを応用した手法である
- 既存のニューラルネットワークにおける問題
    - 誤差逆伝播法
    - ネットワークを深くすると誤差が最後まで正しく反映されなくなる
        - 要因の一つとしてシグモイド関数
        - シグモイド関数の微分は最大値が0.25
        - 隠れ層を遡るごとに伝播していく誤差がどんどん小さくなっていく
        - 勾配消失問題



### ディープラーニングのアプローチ

- 事前学習によるアプローチ
    - オートエンコーダ
- オートエンコーダ
    - 可視層と隠れ層の二層からなるネットワーク
        - 可視層は入力層と出力層がセットになったもの
    - 入力と出力が同じもの
        - 入力の情報が圧縮されたものが隠れ層に反映される
        - 入力層の次元よりも隠れ層の次元を低くしておく
    - 入力層→隠れ層：エンコード
    - 隠れ層→出力層：デコード
- 積層オートエンコーダ
    - オートエンコーダを積み重ねたディープオートエンコー
    - 入力層に近い層から順番に学習させるという逐次的な方法
    - 順番に学習していく
    - 事前学習
- ファインチューニング
    - オートエンコーダを積み重ねてもラベルを出力することはできない
    - オートエンコーダを積み重ねた最後にロジスティック回帰層を足すことで教師あり学習を実現
        - シグモイド関数あるいはソフトマックス関数による出力層
        - 回帰問題の場合には線形回帰層
    - ロジスティック回帰層にも重みの調整が必要
    - 最後の仕上げのことをファインチューニングと呼ぶ
    - 積層オートエンコーダは事前学習工程＋ファインチューニング工程
- 深層信念ネットワーク
    - 教師なし学習に制限付きボルツマンマシンという手法を用いる
- 事前学習なしのアプローチ
    - 最新の手法では事前学習を用いることはない
    - 一気にネットワーク全体を学習する手法が考えられたため
    - 事前学習を行う場合計算コストが非常に高い

### ディープラーニングを実現するには

- CPUとGPU
    - ハードウェアの進歩、ムーアの法則
    - 半導体の性能・集積が鍵を握る
    - CPU：コンピュータ全般の作業
    - GPU：画像処理に関する演算を行う
- GPGPU
    - ディープラーニングでは同じような計算処理が大規模で行われる
    - 画像以外の目的での使用に最適されたGPU
    - NVIDA社がリード
- TPU
    - Google社によるテンソル計算処理に最適化された演算処理装置
- ディープラーニングのデータ量
    - 学習とモデルが持つパラメータの最適化
    - バーニーおじさんのルール
    - モデルのパラメータ数の10倍のデータ量が必要



## 第6章　ディープラーニングの手法







### 活性化関数

- tanh関数
    - ディープニューラルネットワークにおける隠れ層で使用
    - シグモイド関数の微分の最大値0.25に比べてtanh関数の微分の最大値は1で勾配が消失しにくい
- ReLU関数
    - tanh関数に代わり現在最もよく使われている
    - xが0より大きい限り微分値は最大値の1をとる
    - xが0以下の場合微分値も0となるため学習がうまくいかない時もある
    - 派生の Leaky ReLU関数、Parametric ReLU、Randomized ReLU

### 学習率の最適化

- 勾配降下法
    - 誤差を誤差関数として定義し、それを最小化する関数の最小化問題
    - それぞれの層で誤差関数を微分した値がゼロになるような重みを求める
    - 勾配に沿って降りていくことで解を求める
    - ここでの勾配とは微分値
    - イテレーション、学習率
- 勾配降下法の問題と改善
    - 勾配がゼロになる地点が複数あった場合に対応できない
        - 局所最適解（見せかけの最適解）、大域最適解（本当の最適解）
        - 学習率の値を大きく設定することで回避
    - 鞍点
        - ある次元で見れば極小であっても別の次元では極大になっている
        - 停留状態プラトー
        - モーメンタム、Adgrad、Adadelta
        - RMSprop、Adam

### 更なるテクニック

- ドロップアウト
    - オーバーフィッティングへの対抗策
    - 学習の際にランダムにニューロンをドロップアウトさせる
    - アンサンブル学習
- early stopping
    - 学習を早めに打ち切る
    - ノーフリーランチ定理
    - あらゆる問題で性能の良い汎化最適化戦略は理論上不可
- データの最適化・重みの初期化
    - 正規化：データ全体を調整する処理
        - 各特徴量を0〜1の範囲に変換する処理など
    - 標準化：特徴量を標準正規分布に従うように変換する
    - 白色化：各特徴量を無相関化した上で標準化する
    - 重みの初期値を工夫する
    - 乱数にネットワークの大きさに合わせた適当な係数をかける
        - シグモイド関数に対しては Xavier の初期値
        - ReLU関数に対しては He の初期値
- バッチ正規化
    - 各層に伝わってきたデータをその層でまた正規化する
    - 各層において活性化関数をかける前に伝播してきたデータを正規化する
    - オーバーフィッティングしにくくなる





#### CNN: 畳み込みニューラルネットワーク

- 画像データの扱いに適したニューラルネットワーク
- 画像データは縦横の二次元、色情報を含めて数値情報としては三次元
- CNNの基本
    - 人間が持つ神経細胞の二つの働きを模す
    - ネオコグニトロン
        - 単純型細胞
        - 複雑型細胞
    - LeNet
        - 畳み込み層とプーリング層
    - 誤差逆伝播法
- 畳み込み
    - カーネルとも呼ばれるフィルタを用いて画像から特徴を抽出する操作
    - フィルタを重ね合わせて総和の値を求めていく
    - 畳み込みによって得られた新たな二次元のデータを特徴マップと呼ぶ
    - 移動不変性、位置のズレに強いモデル
- プーリング
    - 決められた演算を行うだけ
    - max プーリング、avg プーリング
- 全結合層
    - どこかで出力の形を一次元にする必要がある
    - 最近は全結合層を用いず Global Average Pooling 
        - 一つの特徴マップに一つのクラスを対応させる
- データ拡張
    - 角度、縮尺、陰影などにより別物と認識されないようデータを準備する必要がある
    - 既存のデータに加工を加えてデータを水増しする
- CNNの発展系
    - AlexNet
    - VGG
    - GoogLeNet
        - Inceptionモジュール
    - Skip connection　層を飛び越えた結合
    - ResNet
- 転移学習
    - 必要なのは最適化されたネットワークの重み
    - ImageNetで学習済みのモデルが公開されている
    - 学習済みのネットワークを利用して新しいタスクの識別に使用することを転移学習と呼ぶ



### RNN: リカレントニューラルネットワーク



- 時系列データの扱い
    - ネットワークに時間情報を反映できるような仕組み
- RNNの基本形
    - 過去の隠れ層が追加
    - 過去の隠れ層から現在の隠れ層に対しても繋がり（重み）がある
    - BackPropagation Through-Time BPTT
- LSTM
    - 勾配消失問題
    - 入力重み衝突、出力重み衝突
    - Long Short-Term Memory
    - LSTMブロック
        - セル（Constant Error Carousel）
        - 入力ゲート、出力ゲート、忘却ゲート
    - LSTMを簡略化したGRU
- RNNの発展系
    - Bidirectional RNN
    - RNN Encoder-Decoder
    - Attention



### 深層強化学習

- 強化学習
    - 行動を学習する仕組み
    - 一連の行動系列の結果としての報酬を最大化するように学習をする
    - 状態をいかに表現できるか、状態を行動にいかに結び付けられるかが課題
- 深層強化学習
    - Q学習
    - DQN、Double DQN、Dueling Network、Categorical DQN、Rainbow
    - Alpha碁
    - モンテカルロ木探索

### 深層生成モデル

- 生成タスクへのアプローチ
- 画像生成モデル
    - 変分オートエンコーダ（VAE）
    - 敵対的生成ネットワーク（GAN）
        - ジェネレータ、ディスクリミネータ



## 第7章　ディープラーニングの研究分野



### 画像認識分野

- AlexNet
- R-CNN
    - 関心領域
    - 回帰問題
    - バンディングボックス
    - 畳み込み演算
    - 高速RCNN
    - YOLO、SSD
- セマンティックセグメンテーション
- インスタンスセグメンテーション

### 自然言語処理分野

- word2vec
    - ベクトル空間モデル、単語埋め込みモデル
    - スキップグラム、CBOW
    - 主成分分析、次元圧縮
- 自然言語処理
    - fastText
    - ELMo
- ニューラル画像脚注付け　NIC
- ニューラルチューニングマシン

### 音声認識

- WaveNet
    - 音声合成、音声認識



### 強化学習（ロボティクス）

- セルフプレイ
- RAINBOWモデル





## 第8章　ディープラーニングの応用に向けて(1) 産業への応用



### ものづくり領域における応用事例

- 不良品検出・検品
- 予兆検知・予防保全
- バラ積みピッキング



### モビリティ領域における応用事例

- 自動運転
- ロボットタクシー

### 医療領域における応用事例

 - 診断支援
 - 創薬
 - ゲノム



### 介護領域における応用事例

- 介護サポート

### インフラ・防犯・監視領域における応用事例

- インフラ領域におけるメンテナンス効率化
- 建設現場における活用
- 産業廃棄物選別
- 防犯・監視

### サービス・小売・飲食店領域における応用事例

- タクシー需要予測
- 来店者情報把握
- 無人コンビニ検証
- 多様な作業への応用

### その他領域における応用事例

- 物流
- 農業
- 金融
- 学習
- インターネット関連サービス
- その他

## 第9章　ディープラーニングの応用に向けて(2) 法律・倫理・現行の議論



### AIと社会

- 法・倫理・社会

### プロダクトを考える

- ディープラーニングを使いたい、の前に
- 「バイ・デザイン」でポジティブサムを狙う

### データを集める

- データの利用条件を確認する
- 役割と責任を明確にして連携を進める
- データセットの偏りに注意する

### データを加工・分析・学習させる

- プライバシーに配慮してデータを加工する
- アルゴリズムを調整する
- 「悪用」へのセキュリティ対策をする

### 実装・運用・評価する

- 成果物を知的財産として守る
- 利用者・データ保持者を保護する
- 予期しない振る舞いに注意し対策を講じる
- インセンティブを設計し多様な人材を巻き込む

### クライシス・マネジメントをする



- 体制を整備する
- 有事に対応する
- 社会と対話し対応をアピールする
- 指針を作成し議論を継続する
- プロダクトデザインに反映する