AWS認定 機械学習 合格しました
いやー、難しかったー。認定試験合格できたけど、奥が深いので実践できるかというと別かなって印象です。10年インフラエンジニアとしてやってきましたが、統計学とかの知識も必要だったり、機械学習アルゴリズムの理解、アルゴリズムの評価、トレーニングデータのチューニングなどなど、今まで経験したことがないジャンルだったので言葉もわからないし、考え方もわからないって感じで、新卒時代を彷彿させる時間を過ごしました。でも、これが楽しんですよね。エンジニアだし!新しいジャンルのことに触れる機会を得られてかなりいい試験でした。もっと実践でやってきたい。
やったこと
- [ ] sagemakerのドキュメント読む
- [ ] ML
- [ ] 触る
- [x] データ変換リファレンス https://docs.aws.amazon.com/ja_jp/machine-learning/latest/dg/data-transformations-reference.html
- [x] MLモデルのタイプ https://docs.aws.amazon.com/ja_jp/machine-learning/latest/dg/types-of-ml-models.html
- [x] コンセプト https://docs.aws.amazon.com/ja_jp/machine-learning/latest/dg/amazon-machine-learning-key-concepts.html
- [x] データ分割https://docs.aws.amazon.com/ja_jp/machine-learning/latest/dg/splitting-types.html
- [ ] sagemakerのコンソール一通り触る
- [ ] ニューラルネットワークの種類(CNN, LSTM, ResNet, Inception)
- [x] 混同行列
- [x] 次元削減、特徴量の増減、正則化、学習率が結果にどう影響するか?
- [x] 活性化関数(基本LeLU)、sigmoid、softmax、恒等関数
- [x] ベイズ(事前格率・事後確率)、ランダムフォレスト
- [x] コンフルの内容をもう一度確認
- [x] レコードIO
- [x] EMRとSageMakerの連携
- [x] 精度と正確度の違い
- [x] 活性化関数
- [x] 自動モデル調整
- [x] pdca、継続的デプロイと評価
- [x] MLS模擬試験
- [x] カスタムコンテナ
- [x] サンプル問題
- [x] バッチ、パイプ、平行実行、ジョブ、ローカルモード
- [x] Sgemaker組み込みアルゴリズム
- [x] セマンティックセグメンテーションアルゴリズム
- [x] K 最近傍 (k-NN) アルゴリズム
- [x] オブジェクト検出アルゴリズム
- [x] IP Insights アルゴリズム
- [x] DeepAR 予測アルゴリズム
- [x] イメージ分類アルゴリズム
- [x] ニューラルトピックモデル (NTM) アルゴリズム
- [x] 因数分解機アルゴリズム
- [x] 潜在的ディリクレ配分 (LDA) アルゴリズム
- [x] K-Means アルゴリズム
- [x] 主成分分析法 (PCA) アルゴリズム
- [x] 線形学習アルゴリズム
- [x] Object2Vec アルゴリズム
- [x] ランダムカットフォレスト (RCF) アルゴリズム
- [x] Sequence to Sequence アルゴリズム
- [x] XGBoost アルゴリズム
- [x] BlazingText アルゴリズム
- [x] 評価の仕方
- [x] MLSサンプル問題
調査したこと
教師あり学習
線形回帰
特徴量に対し、方程式(モデル)を導く。傾きとか接点とか。次元が増えるとモデルが複雑化する。トレーニングデータにあわせすぎると、未知のデータに対する検証ができなくなる。これを過学習という。過学習を防ぐには、モデルをシンプル化する正則化を用いて汎化性能を向上させる。
正則化
Lasso回帰とRide回帰
ロジスティック回帰
ある事象が起こる確率を出す、2値分類
サポートベクトルマシン
分類と回帰、どちらにも利用可 直線、曲線、円など複雑なデータにも対応 線形カーネル、シグモイドカーネル、多項カーネル、RBFカーネルなど様々な形で分類できるカーネルがある
ナイーブベイズ
自然言語における分類。例えば、スパムメール。確率を出す。 文章をカテゴリに分けたり
ランダムフォレスト
複数のモデルを束ねて高性能のモデルを作成する。回帰、分類どちらにも適用できる。決定木を利用し、複数の弱学習機を組み合わせる。森の数を深くしても過学習がなく途中で収束する
ニューラルネットワーク
回帰、分類に使えるが応用では分類に使われることが多い
教師なし学習
PCA(Principal Component Analysis)
歴史が深い主成分分析。例えば変数が100個あるデータを分析する場合、そのまま分析するよりも、変数を減らして例えば5個にした方が、後の分析が楽になる。減らす方法は2通り。1つは、重要なデータのみを選択する、もう一つは元データから新たな変数を生成する。主成分分析は、新たな変数を生成することでデータの変数を削減する方式。高次元データを低次元データとして扱う。
LSA(Latent Semantiv Analysis)
次元削減手法として、情報検索の分野で活躍 LSAによって、大量の文書データから単語が持つ潜在的な関連性を見つけ出す。通常は単語に対してindexwをつけることで検索していた。
NMF
LDA
K-means法
混合ガウス分布
LLE
t-SNE
分類における評価法
- 混合行列
- 緑:正解率、正確さ(Accuracy)> TN+TP/全体。予測値がどれくらい正解しているか。
- 黄:適合率、精度(Precision)> TP/FP+TP。1と予測したものがどれくらい正解しているか。例えば、20歳以上のコンテンツ判定で利用した場合、適合率が低いと子供でも見ていいコンテンツが20歳以上と判定されているということ。
- 赤:再現性(Recall)> TP/FN+TP。実際のデータに対して、どれくらい正解しているか。この値が低いと、20歳以上コンテンツでも通常コンテンツと判定されてしまう。適合率と再現率は相関関係にあるので、どっちかの正解率をあげるともう一方の正解率がさがる。あいまいなものを20歳以上のコンテンツと判定する(再現性率を上げる)と、誤って通常のコンテンツも含まれてしまうイメージ。つまり適合率がさがる。
- F値:2x(適合率x再現率)/(適合率+再現率)。適合率と再現率のバランスをみたいときに利用。
- 予測確率:分類結果に何%の確率であっているかを出す
- ROC曲線AUC: ポジティブデータ数とネガティブデータ数にかなり差がある場合、適正なモデルにならない。不均衡データの指標としてAUCを用いる
回帰における評価
- 平均二乗誤差:実際の値と予測値の差がどれだけあるか。誤差の二条を全て計算し平均をとったもの。この誤差が少ないほど予測が正しい。
- 決定係数:平均二乗誤差を使って学習したモデルの予測の当てはまり度を示す数値。R2と言われている係数。最大で1、この数値が誤差が一番ない状態。
バッチサイズ
- ディープラーニングでは、内部的にデータを分けて学習する
- 異常値の影響を少なくするため
- 習慣として2のN乗の値が利用される
イテレーション
- バッチサイズが決まれば自然と決まる
- 1000件データあり、バッチサイズ200とするとイテレーションは5
エポック数
- バッチサイズに従い、データを分割
- 分割データ数分、学習を行う
- 1と2でワンセット。ワンセットをエポックという。
- 損失関数(コスト関数)が収束するまで、エポックを繰り返す
- ただし、収束しすぎると過学習がおこる
損失関数
- 予測と実際の直のずれを表す
- 直が小さいほど正確なモデル
- 平均二乗誤差など
- バッチサイズ: 大きくすると汎化性能が落ちる
- 学習率: バッチサイズに合わせた最適な学習率を選択。バッチサイズと学習率は比例の関係にあるので、バッチサイズを下げたら学習率も下げる
サンプリング
- クラス比率が不均衡の場合、データを増やしたり減らしたりしてバランスをとる
- オーバーサンプリング: 件数が少ないデータを増やす
- アンダーサンプリング: 件数が多いデータを減らす
不均衡データの学習
- 目的変数の分布に大きな偏りがあるデータ
- 滅多に発生しないデータにどうやって対応するモデルを作るのか?
- 不均衡データでは正解率を上げるのではなく、再現性を上げることが多い(例えば、データが偏っているのでTrueと全て予測すれば正解率があがる)。でも、実際はそうじゃい。
- アプローチ
- データレベル:オーバーサンプリング(少ないラベルデータを増やす)またはアンダーサンプリング(多いラベルデータを減らす)を行う。オーバーサンプリングの代表的な手法がSMOTE
- コスト思考型学習:損失関数にて、誤分類したときの重み付けを多くする
- 異常検知:教師なし学習で対応する
欠損値データの学習
- 欠損の種類
- ランダム欠損
- 観測データに依存する欠損
- 欠損データに依存する欠損
- データ量が単純に多い場合:削除または固定値を入れる
- データ量が少ない場合:平均値または頻繁値を入れる、平均からばらつきを考慮して値を入れる
- 多重代入法:欠損値を推定して入れる
ハイパーパラメータ探索
- ベイズ最適化:形状がわからない関数(ブラックボックス関数)の最大値を求める手法。グリッドサーチより軽量。どこのパラメータが一番精度があがるかを、結果を考慮し探索していく
- グリッドサーチ: グリッドを作り、交点のパラメータをすべて組みあせて、一つずつ試す。計算数が多くなるので時間がかかる。
モデルの過学習
- 学習データでの予測は成功、未学習のデータに対する予測がだめ > 学習しすぎている過学習状態
- 学習データが少ない、変数が多い、パラメータが大きいことが原因
- 汎化性能が重要
- 解決策
- 学習データと検証データに分割する(7:3)学習データ多い6:4、学習データ少ない8:2など工夫する
- 交差検証(クロスバリデーション):データセット全体に対して、学習用データ・検証用データのパターンを複数用意し、かたよったモデルにならないようにする
- ベイズ最適化。最大値になる確率や期待値を定義しパラメータを予測する。グリッドサーチに比べてコストが少ない。学習データを増やすの
- 特徴量削減
- L1正則化: 変数を減らす lasso
- L2正則化: 過学習を防ぐ ridge 重みの二乗を足す。変数は減らないので、変数多い場合はモデルが複雑になる
- アーリーストッピング
- アンサンブル学習法
- 特徴量と次元は同義
- 次元の呪い:特徴量が多いと効率的に学習させるのが難しい 活性化関数
- 学習データと検証データに分割する(7:3)学習データ多い6:4、学習データ少ない8:2など工夫する
- ニューラルネットワークにおいて、線の形を司る関数。
- シグモイド: s字 2値分類
- ソフトマックス: 二乗曲線 多項分類
- ReLU: 0以下は0 、0より大きいと入力。プラス値のみを、利用するとき
- 恒等関数: 入力をそのまま。何も変更しない場合
RecordIO
学習率
- 学習するときに動かす最適化関数のパラメータの割合
- 学習率を低くすると、ちょっとずつ動かすので回数こなす必要あるので時間がかかる。ただし、最適値を見つけやすくなる。
- 学習率を高くすると、大きく動かすので回数こなさなくても大丈夫。ただし、大まかなため最適値を見逃しやすくなる。
次元削減
- 説明変数を減らす
- 例えば体重と身長を二次元でプロット。これを一次元にしたとき、直線は体格をあらわす。次元削減しても体格という軸で見れる。
- データ圧縮、データの可視化
- 手法としてPCA(主成分分析)がある
SageMaker組み込みモデル
自然言語処理
BlazingText(Word2Vec)
- 単語ベクトルを生成し、テキストを分類
- 似た意味の単語であれば、似たようなベクトルになる
- 教師あり
- 用途:単語分類、文章の意味を解析、感情分析、エンティティ認識、機械翻訳など
Sequence to Sequence
- 教師あり学習
- 一連のトークン(テキスト、オーディオ)を別のトークに変換する
- 日本語を英語にする、長文を短文にする、音声認識などに利用される
- エンコーダー、デコーダーをとしてのRNN(再帰ニューラルネットワーク)または、CNN(畳み込みニューラルネットワーク)を使用する
- RNNでは、系列データを扱える。例えば、単語を入力したら過去の入力も踏まえて、次の単語を予測する
潜在的ディリクレ配分(LDA)
- トピックモデル
- 教師なし
- ドキュメントがどういうトピックで構成されているかを調べる
- 特徴は単語の出現回数、カテゴリはトピック
- 類似の単語が使われてるドキュメントを分析できる
- 文書に限らず、さまざまな離散データに隠された潜在的トピックを推定する(画像、音楽情報処理、SNS解析など)
ニューラルトピックモデル(NTM)
- 教師なし
- ドキュメントのトピックを抽出
- ニューラルネットワークを利用
- 文章分類機の前段で利用
- 単語ベースのモデル(LDA)よりも、優れたパフォーマンスが期待される
コンピュータビジョン
イメージ分類
- 教師あり
- イメージを分類する、マルチラベル分類対応
- ゼロからトレーニング、転移学習も利用可能なニューラルネットワーク(ResNet)を利用
- 推奨入力形式は、MXNet RecordIO。ただし、jpg、pngも利用可能
- 転移学習
オブジェクト検出(SSD: Single Shot MultiBox Detector)
- 教師あり
- 単一のニューラルネットワーク
- イメージ内のオブジェクトを検出、分類
- 物体の境界ボックスと分類
セマンティックセグメンテーション
- セマンティックとは意味、セグメントの意味を理解する
- コンピュータビジョン、ピクセルレベルのアプローチ
- 自動運転、医療用画像診断、ロボットセンシングなど
- イメージ分類アルゴリズムは、イメージ全体を分析する教師あり
- オブジェクト検出アルゴリズムは、イメージ内のオブジェクトを全て検出し分類する教師あり。長方形の境界ボックスで示す
- セマンティックセグメンテーションは、イメージ内の全てのピクセルを分類。オブジェクトの形状を検出。
分類・回帰ハイブリッド
XGBoost
- 教師あり学習
- 回帰、分類、ランキングに対応
- アワビの年齢予測(回帰
- ハイパーパラメータが豊富
- ハイパーパラメータ、分類はロジスティック、回帰はライナーかっこいいので線形)
Object2Vec
- 高次元ベクトルを低次元化し、類似したオブジェクトを近距離に配置する手法。物事の関係性を計算する
- 動画のレコメンド、ドキュメント分類、文章類似性、自然言語理解、情報検索
- 分類、回帰に使える
- 教師あり学習
線形学習
- 分類、回帰
- 教師あり
- ハイパーパラメータ、分類はクラシフィケーション、回帰はレグレッサー
因数分解機
- 分類、回帰
- 教師あり
- 高次元データの相互作用を経済的に予測するようにチューニングされている
- 特定のカテゴリの広告を特定のカテゴリのwebページに配置した時のクリック率の予測
k近傍法(k-NN)
- 距離が近いデータをk個集め、多数決から目的値を求める。学習にあたる部分がない
- レコメンドなどで利用される
- 分類、回帰
データ解析
主成分分析法(PCA)
- 教師なし
- データを選択、または新しいデータを作ることで次元を減らす
- 10科目あるテストで、学生の能力を分析するなどデータ解析に利用
- 表形式のデータを利用する
- 2つのモード
時系列データの予測
DeepAR
- 教師あり
- 回帰
- 再帰ニューラルネットワーク
- 大量の時系列データに対する予測モデル
異常検知
IP Insights
ランダムカットフォレスト(RCF)
- 異常なデータポイントを検出する、異常値スコアを返す
- 教師なしアルゴリズム
- 時系列データのスパイク、周期性の中断、分類できないデータポイントなどを検出
- 異常値とは、外れ値建築、変化検知、異常部位検知
- 異常購入、銀行へのサイバー侵入、MRIスキャンの異常、不正な保険請求、異常な機械動作、ネットワーク侵入検知など
K-Means
Sagnaker 運用
パイプモード
- s3からストリーミング
- EBSの消費が少ない
- 読み込みが高速
ファイルモード
- EBSにデータをダウンロードしてから処理
- 容量を消費する
- 読み込みが遅い
パイプラインモード
- 前処理を含めた形でモデル作成まで行う
- 処理A用のコンテナ、処理B用のコンテナ、モデル作成用のコンテナと順番に実行する
- パイプラインは同じEC2上で処理するのでローカルデータを利用するため、処理が早くなる
- record io形式だとさらに高速
デプロイ方式
- 永続エンドポイント:リアルタイム推論。deployメソッド。APIで取得。
- バッチ変換:データセット全体を推論。create_transform_jobメソッド。結果はS3に保存。
- ローカルモード: オンプレミスでコンテナを起動し、学習や推論を行う
Amazon ML
コンセプト
- データソース: データそのものではなく、s3への参照アドレスが保存
- MLモデル:バイナリ分類、複数クラス分類、回帰の3種類
- 評価
- AUC: 不均衡データの指標
- F1: 正確度と再現率のバランスを見る
- RMSE: 二乗平均平方根誤差、回帰に対するパフォーマンス評価
- カットオフ: 数値予測スコアを0と1に丸める
- Accuracy: 精度。全体に対する予測正解率
- リコール: 実際の正の合計数に対し、正と予測した割合
- バッチ予測
- 全てを一度に予測。リアルタイム性の要件がないものに適用
- リアルタイム予測
- インタラクティブな予測で利用。低レイテンシ
データの分割
- トレーニングデータとテストデータに分ける
- データの事前分割:自分で好きに分割する
- シーケンシャル分割:時系列データは順番に取得する
- ランダム分割:カテゴリ別のデータは、カテゴリごとにランダムに取得する
モデル
- バイナリ分類(ロジスティック回帰):スパムメールか?購入するか?ボットレビューか?
- 複数クラス分類(ロジスティック回帰):書籍、映画、衣類か?コメディ、スリラー、ドキュメンタリーか?
- 回帰モデル(線形回帰):明日の温度は?販売予測は?どれくらいの値段で売れる?