らんだむな記憶

blogというものを体験してみようか!的なー

ga138(深層学習)まとめ(2)

Week 3

  • 一番重要なのはデータ
  • データは枚数ではなくどれだけ情報があるかが重要
  • 深層学習に向いている問題
    • データが多い
    • 正解データが決まっている
    • 入力と出力のサイズが固定されている
    • 学習済みのモデルを利用できる
    • [具体例] 超解像: データを集めやすい (高解像のデータは幾らでもある)
      • 画像の残差を元の画像に足す
  • 深層学習に向いていない問題
    • データが少ない
    • 教師なし学習
    • 入力か出力が固定されていない
    • ユーザーの編集
    • 高解像度
    • [具体例] 画像補完 (写真の中からオブジェクトを消す)
      • 深層学習を使わない例: 最適化: Adobe Photoshopの「PatchMatch」(他の場所を切り取って貼る)
      • 深層学習は作り出すのは苦手: 正解が1つではない。“自然”な状態が分からない。
      • 高解像が苦手。
      • マスクする箇所の形状が不定形。
      • 画像解像度やマスクを固定にさせて学習させるとそれっぽくはできる。
    • [具体例] 画像生成 (ランダム変数・ランダム分布からの画像生成)
  • 空間解像度
    • CNNの第N層のカーネルを見ると何を学習しているか見られる
      • 第1層: エッジ
      • 第2層: もう少し複雑な情報
      • 第3層: 模様
      • 第4層: 犬の鼻とか鳥の足とか
      • 層を深くすると入力の広い範囲を見えるようになる
    • 入力の見えている範囲 = 空間解像度
  • 有向非巡回グラフ

Week 4

  • 最適化手法
    • バッチは少なすぎると不安定になる
  • モデルパラメータの更新
    • 確率的勾配降下法: 一つのハイパーパラメータで重みを更新
    • 慣性 (Momentum)
    • Adagrad: 重みにつき更新率が異なる
    • RMSprop: Adagradの最新版
    • Adam: 慣性やバイアスの調整
    • Adadelta: ラーニングレートを自動設定
  • サドルポイントは非常に複雑なところ
  • 一番良いのは?
    • 大抵どれも精度が高い
    • ラーニングレートやハイパーパラメータの調整が重要
    • 基本的には何を使ってもなんとかなる
  • どうやって汎化性能を上げて過学習を避けるか
    • 結構使われているのはDropout
  • Data augmentation
  • ファインチューニング
    • 大規模データでモデルを学習
    • 最終層を新しい層に入れ替え
    • 新しいデータで学習を続ける
    • 小さいデータセットで性能向上
    • 覚えたことを忘れさせないように小さい学習率
    • 最終層の学習率が大きい
  • 敵対的学習
    • 生成モデル $G$ ではある分布 $\rho_y$ がある
    • $z \sim N(0,1) \to G \to y$
    • $G$ を直接学習するのは難しい
      • 識別モデル $D$ を追加
      • $z \sim N(0,1) \to G \to y \to D \to p(y \sim \rho_y)$
    • $D$ は識別できるように最大化、 $G$ は $D$ を騙すように最小化
    • 順番で同時に学習
  • 教師データ作成は大変
    • 人手で学習データのラベリング
    • 教師あり学習で最も困難なプロセス
    • 品質・分量が成果を左右
  • 学習進捗の管理
    • TensorBoardやVisdomといった、学習状況のモニタリングツールを利用
    • 一般にデバッグが難しいのでモニタリング必須
  • 深層学習が効果的なのは画像やテキストといった高次元データがメイン。スパースなデータしかない場合にはランダムフォレストやSVMといったクラッシックな手法でもかなり成果が出るかも
  • 機械学習モデルの選定
    • ディープラーニング
      • 画像や動画のように次元の高いデータを扱う必要がある
      • 特徴表現を学習させたい
      • 十分な学習用のデータサイズと計算リソースを使用可能
      • TensorFlow, PyTorch, Chainer
    • 軽量なモデル
      • 数カラム、数千レコードのテーブルデータから回帰モデルを学習するようなケース
      • データがスパース
      • sklearn, XGBoost, LightGBM
  • スパースデータの分散表現学習
  • ベクトルが作成できれば線形識別機とかで何か予測ができる
    • テキスト
      • ある単語を入れた時に何百次元のベクトルを自動で出すようなもの
      • Word2Vec (Mikolov 2013)
      • Paragraph2vec (Le and Mikolov 2014)
      • Transformer (Vaswani 2017)
      • BERT (Devlin 2018)
    • テーブルデー
      • Cat2vec (Wen 2016)
  • バンディットアルゴリズム
  • あるドメインのデータに対してはあるドメインの知識は欠かせない
  • ドメインのデータ傾向をよく知っておくことは大事
  • ドメインを知らずに適当にディープラーニングのモデルに突っ込んでもあまりうまくいかないのが普通
  • 深層学習のビジネス応用
    • 目的とするタスクによって適用の可否をよく判断すべき
      • 大規模データが存在しない
        • まずはデータ基盤整備から
      • スパースなテーブルデー
      • 大量の画像やテキストデータを分析する環境