Hikaru's notes
A collection of notes and resources
View the Project on GitHub
HikaruMizoe/notes
トップ
AWS
Certs
03.MLA-C01
AWS認定 Machine Learning Engineer - Associate模擬試験
運用中のモデルについて、オンラインでバイアスドリフトが発生してないか検証するワークフローを実行したい
【⭕️】アプリケーションからLambdaを呼び出して、SageMaker Clarifyジョブを実行する
【❌】Lambda関数からSageMakerの組み込みイメージであるsagemaker-model-monitor-analyzerを実行する
S3にあるcsvファイルを機械学習のトレーニングデータにする目的でデータ前処理を行いたい。データには未入力なフィールドも結構ある。3ステップを選択する
①Glueクローラーでスキーマと利用可能な列を推論する
データカタログを作るという意味。欠損地を推論するわけではない
②Glue DataBrewを使ってデータクリーニングや特徴量エンジニアリングを実施する
データクレンジング、欠損値処理(補完や削除とか)
③S3バケットに保存
バケット分けるかパス分けるだけかはよくわからん。たぶんバケット分ける
SageMaker Feature Storeで特徴力の作成・管理を始めるはじめの3ステップ
①フィーチャーグループを作成する
データのスキーマ、ストレージオプション、インデックスもここで定義する
②レコードを取り込む
レコードは普通にトレーニングとかのデータ1行のこと
レコード単位で履歴みたいな扱いで管理する
③トレーニング用のデータセットを作成するためにストアにアクセスする
トレーニングデータセットを作成
レコードから作成する。いつのデータから特徴量を生成するみたいな絞り込みができる
モデルの学習に必要な特徴量の取得ができる
SageMakerで手動承認んワークフローを実装して、承認されたモデルだけが本番環境にデプロイされるようにしたい
SageMaker Pipelineで手動承認ステップを含んだワークフローを定義できる
これに加えてSageMaker ModelRegistryに登録されたときにSDKから承認済みにステータス更新する仕組みも作れる
XGBoost予測モデルで顧客のサブスクリプション解約可能性を予測している。F1スコアの変更もモニタリングしてる。モデル品質のベースライン分析時にF1スコアの閾値の更新があった。更新から数ヶ月更新する必要がなかったが、最近になってF1スコアが大幅に低下した。原因として考えられるのは?
【⭕️】学習に使う顧客データにコンセプトドリフトが発生した
【❌】モデルの複雑さが不十分で、ベースラインデータのパターンを捉えきれていない
制度に問題ない時期があるため、原因と考えづらい
【❌】ベースライン計算時に誤った正解ラベル(ground truth)が与えられた
数ヶ月F1スコアに影響がなかったので原因と考えづらい
学習時の損失が収束しないとき
学習率を減らす
高すぎると最適な損失最小点に到達する前に通り過ぎちゃって元に戻ろうとして振動する感じ
小さくするとより安定して収束する
小さくすると学習速度は遅くなってしまう
【❌】早期停止を導入する
収束してないので効果は薄い
そもそも目的は過学習を防ぐこと
Comprehendカスタムモデルをクロスアカウントコピー
リソースベースIAMポリシーを作成して、ComprehendのImportModelAPIを使って別のアカウントにコピーする
【コピー元】ポリシー内でコピー先アカウントへのアカウント許可
【❌】S3バケットを作成して、ExportModelAPIを使ってエクスポートして、アカウントBで読み込む
そもそもAPIがない
CFnでSageMakerエンドポイントがホストするMLモデルを展開したい
順番に
AWS::SageMaker::Model
モデルのアーティファクトの場所とか、コンテナ使う時はコンテナイメージの場所とか
AWS::SageMaker::EndpointConfig
エンドポイントのインスタンスタイプとか数とか
AWS::SageMaker::Endpoint
EndpointConfigに応じたエンドポイントを作成する
偽陰性のコストが高いときに重視する指標
高い再現率
SageMaker PipelinesでGlueのデータ処理ジョブ出力を使用したい
CallbackステップからGlueのジョブを起動し、そのジョブが完了するまで待機する
Readshift内の機密データについて、元のデータを変換せず、匿名化したデータをデータストアに保存せずにデータサイエンティストに提供したい
【⭕️】Readshiftの動的データマスキング機能を使う
ユーザーごとにアクセスレベルが設定できる
権限がないカラムにアクセスするクエリ結果はマスキングされる
【❌】マスキングロジックを含めたマテリアライズドビューを作って読み取り権限を与える
マテリアライズドビューはデータを新しく保存する点でNG
リアルタイム性が損なわれるのも要件と相談
新しい MLモデルを本番相当の環境でテストしたいが、本番ユーザーへの影響は与えたくない
シャドウテスト
新しいモデル(シャドウバリアント)に本番と同じデータを送信して比較する
SageMakerのエンドポイント構成にシャドウバリアントという設定項目がある
Budgetsをでコンピュート費用が予算の閾値を超えたら通知
SageMakerドメイン内でリソースタグを追加してコスト管理する
Amazon Q Businessにはブロックフレーズで特定キーワードを除外できる
競合他社名とか
外部APIのトークンをローテーションしたい
Secrets Managerに保存して使用する
Lambda関数を定期的に呼び出して更新するように設定できる
トレーニングのインスタンスは可用性よりもレイテンシを重視しても良い。クラスタープレイスメントとか
トレーニングデータのストレージとしてEFSもLustreと近い使い方はできるが、レイテンシで劣るのでまず選ばない
データの前処理で、順序が意味のある特徴量と破棄できない機密情報がある。機密データのマスキングをしたい
Glue DataBrew
事前定義されたデータマスキングと変換を
本番環境での推論データをトレーニングデータと同じ方法で正規化したいケース
モデルの予測精度を保つのに重要
データドリフトを検出しやすくもなる
XGBoostでの不正検出モデルで過学習の可能性(トレーニングの精度は高いが未知のデータで精度が低い)。学習方法の修正
【⭕️】max_depthを減らす
モデルの複雑さは減る。あまり深いツリーを作ると複雑に捉えすぎるので汎化性能が低くなるという説明がされる
高いとモデルの収束は早くなるが、過学習のリスクが高まる
副次的だた小さな木構造になるのでトレーニング速度や推論速度が向上する
ALBの背後にSageMakerエンドポイントをデプロイしてカナリアデプロイみたいなこともできる
プロダクションバリアントをSageMakerエンドポイントに追加して、重みを設定する
0-1の間
Glue DataBrewの要件として、同じフォルダ内には同じ拡張子のファイルだけというのがある
なのでDataBrewの入力に使うフォルダの整理が必要な時がある
ポジネガ系二値分類の指標
ポジティブな予想の指標
正確性
ネガティブ系
再現率
ネガと予想した中で実際にポジだった割合?
品質管理で重要
精度
ネガと予想した中で実際にネガだった割合
医療診断で重要
全体の指標
F1スコア
正確性と再現率の調和平均
どちらも重要な場合に使う
トレーング中のノード間通信の暗号化
【⭕️】トレーニングクラスターでノード間通信の暗号化を有効にする
【❌】KMSのキーをアタッチする
そもそも通信中の暗号化にKMSのキーは使わない
HTTPS通信できるようにとかgRPCチャネル設定したりとかなので
時系列予測モデルの品質評価指標
二乗平均平方根誤差
数値予測とかでもよく使う。単位が元データと同じ
小さいほど精度が高い
平均重み付き分位損失
時系列予測の中でも分位予測を行うモデル
予測の信頼区間とか範囲予測とかの指標として便利みたい
SageMakerノートブックインスタンスでrootアクセスを許可しない
IAMポリシーで条件キーを使用してrootアクセスを許可するようなノートブックインスタンスのデプロイを阻止する
ConditionKeysに”sagemaker:RootAccess”キーに対して”Disable”が設定されてないとデプロイできないようにできる
特徴量の貢献度とバイアスを混同しがちなので注意
例えば「現在のモデルではリスク評価や融資承認の決定を行う際に、申請者の信用履歴の長さよりも個人所得の方が2倍重視されています。運用中のモデルが個人所得よりも信用履歴の長さに重点を置き始めた場合に警告を発する仕組みをデプロイしたい」
ModelExplainabilityMonitorクラスを使ってSHAPベースラインを作成して違反をキャプ者、CloudWatchでアラートを設定
S3に保存しているトレーニングデータを別のAWSアカウントに共有したいデータへのアクセスはプログラムとマネコンの両方
AWSアカウントにロールを作成し、データを提供されるAWSアカウントでこのロールを引き受ける
assumeRoleで許可。
LLMは英語を介した方が精度が良くなるらしいので、翻訳した情報を入力することも多い
要約の時ですらやるっぽい
MacieはPIIを検出はできるがマスキングやデータ変換は自動的にはできない
報告に特化している
自動でマスキングしたいならData Wrangler+Comprehend APIとかっぽい
Comprehendが読み込める拡張子
pdf, docx, txt
utf-8テキストドキュメントは大体受け付けるみたい
CloudWatchメトリクス
Model SetupTime
トレーニング時のモデル初期化時間
Model LoadTime
推論時のモデル初期化時間
Lambdaはストリームデータを継続的に処理するのには向いてない
Amazon ManagedService for Apache Flinkとか
Glue DataBrewとSageMaker DataWranglerの使い分け
データカタログを作りたい時はDataBrew
AWSの分析サービスに提供しやすいらしい
ハイパーパラメータ
学習率
どれくらいの「歩幅」で最適解に近づくか
大きいと行きすぎて振動するとか
小さいと収束に時間がかかりすぎるとか
学習率の減衰:初めは大きめで、学習が進み出したら小さくする
エポック数
トレーニングデータセットをモデルに何回学習させるか
1エポックはモデルが全てのトレーニングデータを一度だけ見た
増やすと性能が向上する傾向はあるが、過学習のリスクが高まる
適切なエポック数を見極めるのには検証データを使った評価とか
ネットワーク構造
層の数とか層あたりのニューロン数とか
ドロップアウト率
ニューロンをランダムに無効化する割合
ニューロンの重みを0にする
過学習を防ぐのに有効
モデルパラメータ
学習を通してモデルがデータから自動的に最適化していく値
ニューロンの重みやバイアスのこと
現状の生産ラインの稼働率とか製品の製造にかかる時間とかを分析して今後の製造時間を予測したい。どういうモデルを使う?
線形回帰
目的変数(予測対象)が数値で、特徴量と目的変数の間に線形な関係があるため
Bedrockで使える基盤モデルの用途
対話能力
Claude
文脈理解(長文生成とか高度な会話とからしい)
Jurassic
画像生成
Stable Diffusion
テキスト生成
Titan
Cohera
リアルタイムでログから異常検知
Kinesis Data Streamsでログを収集
Amazon Managed Service for Apache Flinkでリアルタイム分析
ランダムカットフォレストをよく使う
教師なし
データポイントの異常検知によく使う
混同行列の各要素を改善したいときに重視する指標
偽陽性を減らしたい
医療現場でよく気にする
Precision(適合率):陽性と予測した中で実際に陽性だった割合
偽陰性を減らしたい
Recall(再現率):実際に陽性だった中で陽性と予測された割合
推論リクエストの遅延を抑えたい時にマルチコンテナエンドポイントポリシーだと、使ってなかったモデルのロードで遅延するかも
EMRのノード種別
プライマリノード
クラスター管理
コアノード
HDFS(分散ストレージ)を提供する
タスクノード
処理を担当
データ損失を気にするか
プライマリとコアは基本的に損失しないように気をつける
タスクは中断とかで消えても大丈夫
インスタンスタイプによっては処理の中断がありうるので、これがデータ損失と同じ意味で考えて良い
SageMaker PipelinesはS3のイベント通知から直接は呼び出せないので、Event Bridgeルールを作る
Glueジョブの完了後に自動的にSageMaker Pipelines実行したい
EventBridgルールを作ってGlueジョブの完了を監視し、ターゲットにはPipelinesを指定する
【❌】Step Functionsでオーケストレーションする
関係するサービスが 2つだけなので、過剰
もう少し複雑だと有用
分岐とか繰り返しとか
SageMaker Debuggerのメトリクス
VanishingGradient
勾配消失問題を検出する
ネットワークが深くなるにつれて学習が進まなくなるみたいな問題
OverfitDetector
過学習を検出する
TensorVaiance
データの分散に以上がある
LossNotDecreasing
損失関数が一定時間収束しない
端的にいうと学習がなかなか終わらない
コストの監視と通知はBudgetsでやる
SageMakerのPcoseccingジョブをStepFunctionsでオーケストレーションするケース
画像のリサイズ、色補正、データ拡張みたいな多段階の前処理を、TensorFlowやPyTorch等のフレームワークを使って実行したい
GlueとかData Wranglerとかじゃできないような複雑な処理
SageMakerにはネットワーク分離モードがある
トレーニングコンテナや推論コンテナがパブリックインターネットアクセスできなくなる
セキュリティグループより設定がらく
本番モデルに影響を与えずに今のデータで新しいモデルをテストしたいケース 2通り
シャドウバリアント
エンドポイント設定でできる
データキャプチャ
ModelMonitorでできる
説明可能性分析に便利な指標
SHAP値
各特徴量が予測にどれくらい貢献したかを示す
特徴量の重要度を理解するのに役立つ
LIME
個々の予測に対する特徴量の影響を局所的に説明する
特徴量の影響を理解するのに役立つ
部分依存プロット
予測された結果の差を入力特徴量の諭して捉える
ラベル比率の差
ファセット間の陽性比率の不均衡を測定
OpenSearchでもベクトル検索可能
データセットをベクトルデータベースに埋め込むみたいな言い方
BedrockのナレッジベースだとLLM使いつつRAGで、Open Searchだとベクトル検索
埋め込みを返すかコンテンツを返すかの使い分け
チャットボットソリューションで回答の根拠になるコンテンツを明示したい時はコンテンツ