Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AI研修(data & training編)【ミクシィ22新卒技術研修】

AI研修(data & training編)【ミクシィ22新卒技術研修】

22新卒技術研修で実施したAI研修の講義資料(data & training編)です。

ハンズオン用リポジトリ
https://github.com/nami73b/machine-learning-notebooks

<<AI研修資料一覧>>
#01 イントロダクション
https://speakerdeck.com/mixi_engineers/2022-ai-training-number-01-introduction

#02 data & training編
https://speakerdeck.com/mixi_engineers/2022-ai-training-number-02-data-and-training

#03 Deployment編
https://speakerdeck.com/mixi_engineers/2022-ai-training-number-03-deployment

#04 サービスへの導入編
https://speakerdeck.com/mixi_engineers/2022-ai-training-number-04-service

B16717ef4b7aab0b253d933c3934f280?s=128

mixi_engineers
PRO

May 09, 2022
Tweet

More Decks by mixi_engineers

Other Decks in Programming

Transcript

  1. 新卒AI研修 02 data & training

  2. 未学習(underfitting)/過学習(overfitting) • どのモデルが正しくデータの傾向を学習できているか? 2 (a) (b) (c)

  3. 過学習: overfitting 過学習が起こる条件 • データが少なすぎる • データに対してモデルが複雑すぎる 過学習を対策するためには... • データを訓練データと検証データ

    に分けることで、overfittingに 気づける状態にしておく データ 訓練データ 検証データ テストデータ 3
  4. 訓練データ/検証データ/テストデータ • 訓練データで学習させていくと、やがてモデルは Lossを下げるために過学習していく ➢ 次第に未知のデータへの予測精度が悪化 • 検証データを切り分け、そのLossを検証することで、 モデルが訓練データに対して過学習することを防ぐ •

    検証データを使って訓練データの学習を制御 ➢ 検証データの情報が訓練データにリークするので 最終的な精度の検証はテストデータで行う 検証データ 学習データ Epochs Loss 4
  5. 訓練データ/検証データ/テストデータ 実際に学習に使用するデータ このデータにモデルが適合しすぎると過学習 学習のステップごとに検証に使用するデータ このデータと訓練データの結果に差があると 過学習と判断できる 学習後に結果を検証するデータ ハイパーパラメータも含めて調整時には使っ てはいけないデータ データ

    訓練データ 検証データ テストデータ 訓練データ 検証データ テストデータ 5
  6. 過学習とデータ量 • 訓練データは表現したいものの全ての空間を表現している必要がある ex) 人の顔を認識させたいのに、イケメンばかり学習データに使用したら? • 問題によって異なるが、データの数はあればあるだけ良い ➢ ただしありすぎると学習は遅くなる 6

  7. 良い特徴量(入力データ)とは 良い特徴量の条件は 1. 目的に関係している値である • 競馬の購入馬券を予測する問題で、馬主の年齢は関係あるか? • いらないデータはノイズになる 2. 推論のタイミングで利用可能である

    • 子供の誕生時の体重を予測する問題で、妊娠日数は使えるか? 3. 意味のある数値(ベクトル)に変換できる • 文章はベクトルに変換することも可能 4. 人間の洞察が含まれている • 良いデータサイエンティストが良いmlエンジニアである理由 7
  8. 特徴量エンジニアリング • 特徴量を前もって学習しやすい形に加工しておくこと   ex) 収入を予測するモデル • 住んでいる家の緯度、経度の情報は関係ある値 • ただ、同じ経度でも東北の緯度と東京の緯度では意味は異なる

    • 本当に意味があるのは数値ではなく、どの地域なのかの情報 • 緯度と経度で分離してバケット化 8
  9. 過学習に対する手法 • Early Stopping • Data Augmentation • 正則化 •

    Dropout • バッチ正規化 • … 9
  10. 過学習に対する手法 • Early Stopping • Data Augmentation • 正則化 •

    Dropout • バッチ正規化 • … 10
  11. 過学習を防ぐ手法 Early Stopping • 監視する精度(Loss, Accuracy等)が一定期間上がらない場合、 学習を停止させる • 主に検証データのLossを監視指標とすることが多い 記法例

    (Keras) 検証データでの Lossが5回連続 改善しない場合 学習終了 検証データ 学習データ Epochs Loss Early Stopping 11
  12. 過学習を防ぐ手法 Data Augmentation • 既存のデータを加工して新しいデータを作ることで、 データ量を水増しする ➢ データのパターンを増やすことにより過学習を抑制 例: 画像のAugmentation

    オリジナル 回転 位置 縮尺 Augmentationあれこれ: https://github.com/AgaMiko/data-augmentation-review … 12
  13. 過学習を防ぐ手法 正則化 • 過学習が発生しているモデルは複雑 • 複雑になるのは目的関数を最適化した結果 • 複雑になりすぎないように目的関数にペナルティ(正則化項)を導入する 目的関数 =

    損失関数 + λ 正則化項 正則化の効きをコントロールす るパラメータ 13
  14. L1 Normalization • モデルのweightを菱形のライン上に収める • 不必要なweightは0を取る事が多い(≒次元圧縮) L2 Normalization • モデルのweightを円のライン上に収める

    • 不必要なweightは0に近づく 正則化項: L1/L2 Normalization 損失が最小となる点 14
  15. 過学習を防ぐ手法 Dropout • ニューラルネットを用いた学習時に、一部のニューロンからの出力を0にする ➢ 特定のニューロンに対しての依存を抑制 • アンサンブル学習のような効果が見込める ➢ エポック毎にDropoutするニューロンが変わることで

    擬似的に複数モデルで協調した出力がされる形となり、過学習を抑制 … 1 epoch 2 epoch 3 epoch モデル Dropout 適用 15
  16. モデル選定とデータ形式 • 機械学習における深層学習(Deep Learning)系のモデルは、非構造化データに 対してより優れた精度を発揮することが多い ➢ 非構造化データの例: 音楽, 画像, 動画,

    テキスト, etc… • 一方、構造化データに対しては、勾配ブースティング決定木(GBDT)系のモデル のほうがより優れた精度を発揮することが多い ➢ 構造化データの例: 表形式データ, RDB内のテーブルデータ, csvデータ, etc… https://www.datarobot.com/jp/blog/is-deep-learning-almighty/ 16
  17. 深層学習におけるモデル: ニューラルネットワーク(NN) Output Input 17 • まず線形なモデルを考える

  18. ニューラルネットワーク(NN) Output Input Hidden 線形変換からは逃れられない… 18 • 層を増やしてみる

  19. ニューラルネットワーク(NN) : Activation関数(非線形変換) Hidden2 Hidden1 Activation Input Output 19 •

    NNでは層の途中にActivation関数 (非線形変換)を挟む • この関数により、線形分離が できない問題も解けるように ➢ より複雑な表現が可能 • NNでは、Activationを図に 表記しないことが多いので注意
  20. Activation関数 20

  21. 試してみよう: Neural Network Playground • 今までの講義の内容を思い出しつつ、NNで遊んでみよう • Neural Network Playground

    ➢ https://playground.tensorflow.org 21
  22. Neural Network Playground 1. 左右に2分割されている問題を解いてみよう • ベーシックな線形問題なので、Hidden Layersなしの Featuresだけで解けることを確認しよう 2.

    円で分割されている問題を解いてみよう • Hidden Layersを増やしたりNeuronsの数を増やしたり ActivationやFeaturesを変えたりして解いてみよう • うまく分類できたら、learning rateを10にして再学習させてみよう(学習できない) • 逆にlearning rateを0.0001にして再学習させてみよう(学習が遅い) • できるだけ単純なモデルで分類できる状態を探索してみよう 22
  23. Neural Network Playground 3. 市松状の問題を解いてみよう • HIDDEN LAYERSを増やしたりNeuronsの数を増やしたり ActivationやFeaturesを変えたりして解いてみよう •

    できるだけ単純なモデルで分類できる状態を探索してみよう 4. 螺旋状の問題を解いてみよう • HIDDEN LAYERSを増やしたりNeuronsの数を増やしたり ActivationやFeaturesを変えたりして解いてみよう ➢ 少し複雑なモデルにしてみよう • モデルのRegularizationをL1, Regularization rateを0.001にしたときの 精度やNeuronのWeightを確認しよう • モデルのRegularizationをL2, Regularization rateを0.003にしたときの 精度やNeuronのWeightを確認しよう 23
  24. Neural Network Playground: 左右に2分割のデータを分類 • ベーシックな線形問題なので、Featuresだけで解けることを確認しよう 24

  25. Neural Network Playground: 円のデータを分類 • Hidden Layersを増やしたりNeuronsの数を増やしたりActivationやFeaturesを 変えたりして解いてみよう 25

  26. Neural Network Playground: 円のデータを分類 • learning rateを10にして再学習させてみよう(学習できない) 26

  27. Neural Network Playground: 円のデータを分類 • learning rateを0.0001にして再学習させてみよう(学習が遅い) 27

  28. Neural Network Playground: 円のデータを分類 • できるだけ単純なモデルで分類できる状態を探索してみよう 28

  29. 自然言語処理(NLP)とTransformer • NLPでは前処理として文章の単語を意味あるベクトルにして 処理するのが主流 ◦ 例: fastText, word2Vec (日本語学習済みモデルもある) ◦

    キャラクター(文字)ベースの研究なども存在しないわけではない • 以前はRNNやLSTMを使ったseq2seqモデルを使っていたが 今はTransformerベース ◦ Attentionというある入力が他のどの情報に関連しているかを学習する仕組み ◦ 詳しくは割愛、モデルの詳細は以下 ➢ Attention is All You Need (https://arxiv.org/abs/1706.03762) 29
  30. Neural Network Playground: 市松状のデータを分類 • HIDDEN LAYERSを増やしたりNeuronsの数を増やしたりActivationやFeaturesを 変えたりして解いてみよう 30

  31. Neural Network Playground: 市松状のデータを分類 • できるだけ単純なモデルで分類できる状態を探索してみよう 31

  32. Neural Network Playground: 螺旋状のデータを分類 • HIDDEN LAYERSを増やしたりNeuronsの数を増やしたりActivationやFeaturesを 変えたりして解いてみよう(少し複雑に) 32

  33. Neural Network Playground: 螺旋状のデータを分類 • モデルのRegularizationをL1, Regularization rateを0.001にしたときの精度や NeuronのWeightを確認しよう 33

  34. Neural Network Playground: 螺旋状のデータを分類 • モデルのRegularizationをL2, Regularization rateを0.003にしたときの精度や NeuronのWeightを確認しよう 34

  35. 深層学習における代表的なネットワーク • DNN • CNN • RNN, LSTM • Transformer

    • GAN • … 35
  36. DNN(Deep Neural Network) • NNの層をDeepにしたものがDNN • 深層学習におけるベーシックなネットワーク 記法例 (Keras) •

    値の合計が1になるように 調整する関数 • 主に多クラス分類の出力に おける活性化関数として 用いられる Softmax 36 Dence • 全結合型ニューラルネットワーク
  37. CNN (Convolutional Neural Network) • 画像など近傍値間で関連が高いデータに使うネットワーク • 画像処理で行われるフィルタ処理を学習するというのが思想 ex) エンボスフィルタ,

    ラプラシアンフィルタ, etc… • 複雑な処理を少ない訓練パラメータで行える • 畳み込み層とプーリング層が存在する エンボスフィルタのカーネル値 エンボス加工の例 37
  38. CNN: 画像と行列 • 白黒画像は、2次元行列で表現できる ➢ SVGAサイズの場合、[800, 600]の行列に0〜255の数値が入る • カラー画像の場合、カラーモードの次元を含めた3次元行列で表現できる ➢

    RGBの場合、 [800, 600, 3]の行列に0〜255の数値が入る 110 136 115 115 104 134 150 186 197 123 112 199 255 225 123 139 216 209 179 114 95 126 115 94 104 134 150 83 52 123 112 83 57 21 89 47 42 41 21 64 96 126 115 93 104 134 150 83 59 123 112 81 64 44 92 50 49 51 39 67 R G B [4, 5, 3] 38
  39. CNN: フィルタを用いた畳み込み • CNNでは、画像の行列に対してフィルタをかけることで畳み込みを行う • フィルタの大きさは[縦, 横, カラーモード]で、縦と横はハイパーパラメータ ➢ カラーモードはInputの画像で決めるため、実装では指定しなくて良い

    ➢ フィルタをスライドさせ、畳み込んでいく(スライド幅もハイパーパラメータ) • フィルタの値がweightであり、学習で最適されるパラメータとなる • フィルタの数はハイパーパラメータとなる 画像 [32, 32, 3] フィルタ [5, 5, 3] スライド幅 1 フィルタ数 6 畳み込み後 フィルタ数分畳み込む 39
  40. CNN: フィルタを用いた畳み込み 40 0 1 0 1 0 1 0

    1 0 1 1 0 0 1 1 1 0 0 0 1 R G B フィルタ 1 1 0 0 0 1 0 1 1 1 0 0 0 1 1 0 1 0 0 0 0 1 1 0 1 0 0 0 1 0 0 1 0 0 1 0 1 1 1 0 0 1 0 1 0 1 画像 [4, 5, 3] フィルタ [2, 3, 3] スライド幅 1 フィルタ数 1 スライド幅ずつずらしていく 5 + bias 1 = 6 [3, 3, 1] Output 1 0 0 1 1 0 0 1 0 1 0 0 [2, 3, 3] 画像(RGB) [4, 5, 3]
  41. CNN: プーリング • 畳み込み後に、行列を圧縮するために用いられる手法 • プーリング幅として[縦, 横, フィルタ数]の行列を指定 ➢ フィルタ数は畳み込み時に指定するので、実装では指定しなくて良い

    • 指定した行列の範囲内における最大値や平均値を出力することで圧縮を行う 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 0 0 0 0 1 R G B 1 1 0 0 0 1 0 0 1 0 0 0 0 1 1 0 1 0 0 0 0 1 1 0 1 0 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 1 0 1 4 + bias 1 = 6 3 5 3 4 4 3 2 5 [3, 3, 1] Output 1 0 0 1 1 0 0 1 0 1 0 0 フィルタ プーリング幅 [2, 2, 1] スライド幅 1 Max Pooling Average Pooling 6 5 4 5 4 4 3 3.75 [2, 2, 1] 41
  42. CNN: ネットワークの全体像 https://paperswithcode.com/methods/category/convolutional-neural-networks 42

  43. CNN: Kerasでの記法例 Padding • validとsameがある • validにすると畳み込み後のサイズが フィルタによって小さくなる • sameにすると元の行列の周辺に0を

    埋めるPadding処理を行う ➢ スライド幅1の場合、畳み込み 後もサイズが変わらない Flatten • 行列を1次元に平坦化する • NNでは多次元の処理が扱えないので、 CNN -> NN にする前でこの平坦化する 処理を行っている 43
  44. ハンズオン1 44 https://github.com/nami73b/machine-learning-notebooks 01_image_classification • ハンズオン、01_image_classificationをVertex AIのJupyter Notebook 環境下でトライしてみてください(詳しくはアナウンスします)

  45. • 学習済みモデルの一部を利用し、追加で解きたいタスクの学習をさせること • 学習の精度向上や、学習の高速化が期待できる • 出力層以外は学習済みモデルを使用し、出力層やその前の全結合層を新たに 定義して学習させることで、自分のタスクに必要な部分のみを学習させる Transfer Learning •

    CNNの層までは学習済みモデル のパラメーターで固定 • Flatten後のFC層は学習可能な パラメーターとして新しく定義 45 https://paperswithcode.com/methods/category/convolutional-neural-networks 例
  46. RNN, LSTM • データの並びに意味が存在するデータに適応するネットワーク ex) 言語, 株取引, 音楽, グラフデータ, etc…

    • 一時期流行ったが、学習に時間がかかるため少し下火 Understanding LSTM Networks ディープラーニングブログ 46
  47. Embedding KerasでのLSTMの記法 • 入力で与えられた数値をベクトルに変更する • IDなどの大小関係のない数値を入力とする際 によく使用される • ベクトル値はパラメータ ➢

    学習が進んでいく事によって、最適化される オラ様 は オラゴン であーる 。 例  0   1   2    3 4 数値変換 Embedding (dim=2) [0.5, 0.6] [0.3, 0.1] [0.6, 0.7] [0.1, 0.8] [0.2, 0.2] 47
  48. GAN (Generative Adversarial Networks) • 主に画像生成分野で使われている手法 • Generator(生成器)とDiscriminator(識別器)を競走させていくことで学習 http://www.whichfaceisreal.com/index.php GANの画像生成例:

    https://thedatascientist.com/limits-ai-creativity/ 48
  49. GANの応用例: CycleGAN • 2つの集合間のドメインを入れ替えるGANの亜種 https://blog.negativemind.com/2020/03/30/cyclegan-image-to-image-translation-by-learning-some-relationship-between-the-domains/ https://arxiv.org/pdf/1703.10593.pdf 49

  50. モデル選定とデータ形式(再掲) • 機械学習における深層学習(Deep Learning)系のモデルは、非構造化データに 対してより優れた精度を発揮することが多い ➢ 非構造化データの例: 音楽, 画像, 動画,

    テキスト, etc… • 一方、構造化データに対しては、勾配ブースティング決定木(GBDT)系のモデル のほうがより優れた精度を発揮することが多い ➢ 構造化データの例: 表形式データ, RDB内のテーブルデータ, csvデータ, etc… https://www.datarobot.com/jp/blog/is-deep-learning-almighty/ 50
  51. • 二分木の構造を用いて、分類・回帰を行う手法 • 複数の条件を二分していき、最終的な出力を決定する ➢ 決定木の条件は学習によって最適化されていく GBDTモデルの基礎: 決定木 51 True

    False True True False False Attacker Defender Defender Attacker シュート精度 >= 中 ボール奪取力 >= 高 スピード >= 中 例: サッカーの選手の能力から適正ポジション(Attacker or Defender)を予測 シュート精度 ヘディング精度 ボール奪取力 ボディバランス スピード スタミナ 高 高 低 中 高 中 選手A 能力値 木を深くしすぎると、過学習に陥りやすくなる...
  52. • 単一の木を深くするのではなく、決定木自体を複数作成し、 それぞれの出力値の多数決や平均を使うことで、最終的な出力を得る手法 ランダムフォレスト 52 シュート精度 ヘディング精度 ボール奪取力 ボディバランス スピード

    スタミナ 高 高 低 中 中 高 選手A 能力値 True False True False Attacker Defender Attacker スタミナ >= 高 スピード >= 中 True False True False Defender Attacker Attacker ボディバラ ンス >= 高 ボール奪取力 >= 中 True False True False Attacker Defender Attacker ヘディング 精度 >= 高 シュート精度 >= 高 Attacker 3 Defender 0 Attacker 52 52
  53. • 単一の木を深くするのではなく、決定木自体を複数作成し、 それぞれの出力値を多数決や平均を使って最終的な出力を得る手法 ランダムフォレスト 53 シュート精度 ヘディング精度 ボール奪取力 ボディバランス スピード

    スタミナ 低 中 高 高 中 中 選手B 能力値 True False True False Attacker Defender Attacker スタミナ >= 高 スピード >= 中 True False True False Attacker Attacker ボディバラ ンス >= 高 ボール奪取力 >= 中 True False True False Attacker Defender Attacker ヘディング 精度 >= 高 シュート精度 >= 高 Attacker 2 Defender 1 Attacker Defender 木の出力値を、どの条件を通るかに関係なく平等に評価してしまう... 53
  54. Defender - Attackerか否かの 2値分類とする ➢ 0.5 >= Attacker ➢ 0.5

    < Defender - • 学習時に各決定木の教師データとの誤差を使って、出力値毎のスコアを算出 ➢ スコアから誤差を算出して、その誤差を次の決定木へと伝搬 • 計算式を用いてスコアを合計し、推論を行う 勾配ブースティング決定木(GBDT) シュート精度 ヘディング精度 ボール奪取力 ボディバランス スピード スタミナ 低 中 高 高 中 中 選手B 能力値 True False True False Attacker Defender Attacker スタミナ >= 高 スピード >= 中 True False True False Attacker Attacker ボディバラ ンス >= 高 ボール奪取力 >= 中 True False True False Attacker Defender Attacker ヘディング 精度 >= 高 シュート精度 >= 高 Defender 3.5 -2 1 -4 2.5 0.5 3 -1.5 0.5 Sigmoid 54
  55. GBDT系手法のライブラリ: LightGBMでの記法 主要な学習パラメータ • objective 目的変数(ラベル) ◦ 二値分類 -> binary

    ◦ 回帰 -> regression ◦ 多クラス分類 -> multiclass • metric 損失関数 ◦ 二値分類 -> binary_logloss - loglossはcross_entropyと同義 ◦ 回帰 -> MSE, MAE ◦ 多クラス分類 -> multi_logloss • モデルの構造 ◦ n_estimators: 決定木の数 ◦ learning_rate: 学習率 ◦ num_leaves: 葉の数 ◦ max_depth: 階層の最大数 パラメータの公式リファレンス https://lightgbm.readthedocs.io/en/latest/Parameters.html 55
  56. 勾配ブースティング決定木の特徴 NNと比較した特徴 • メリット ◦ 解釈性が高い ➢ 各ノードが使用する特徴量がわかる ◦ 計算時間、コストが小さい

    • デメリット ◦ 非構造化データには(基本的に)非対応 ➢ 画像とかはNNの方が得意 56
  57. None