AWS認定のうち、機械学習に無事合格しました!これで全11冠達成です!!
2019年にSAAをとり、そこから少し時間をあけ、丸1年かけて残り10冠を取得してきました。
今日は「AWS認定 機械学習ー専門知識」の勉強法と学んだことを書き出していきます。
準備期間と結果
準備期間は2021年12月27日~2022年1月9日と約2週間でした。
前回受けたデータアナリティクスと重複する箇所が多く、新たな勉強量は比較的少なくて良かったですが、純粋な機械学習の知識を学ぶ必要がありました。
結果は809点で、無事全分野「コンピテンシーを満たしている」と判定されました!
合格までの勉強法
1.試験ガイド
AWSが公式に提供する試験内容を説明した資料です。リンクはこちら。
いつもの通り、出題される分野と試験対象のAWSサービスを確認しました。
(出典)AWS Certified Machine Learning - Specialty 試験ガイド
2.試験ガイド
こちらもいつも通りのAWS公式サンプル問題10問。今回はこちら。
これを見て「あ・・いつものAWS認定資格と違う」と感じました。AWSサービスの特性や使い方ではなく、機械学習のアルゴリズムや評価・最適化に関する問題が6~7割を占めています。
これは「AWS認定 機械学習-専門知識」における大きな特徴だと思います。
3.AWSデジタルトレーニング
AWS Skill Builderの中に日本語向けのコンテンツがあります。
「Exam Readiness: AWS Certified Machine Learning - Speciality (Japanese)」です。
リンクはこちら。
各分野に出てくるAWSサービスや機械学習アルゴリズム、キーワードを拾い上げていきました。全体像はつかみますが、この時点で詳細まで理解しきる状態には到達できていません。
4.AWS WEB問題集で学習しよう
いつもお世話になっているこちらのサイトを今回も活用しました。
データアナリティクスと同様、この問題集と全く同じ問題は本番では1割くらいしかありませんでした。
ですが、合格に足る理解を深めるには十分でした。これをベースに詳細情報を把握していきます。
5.模擬試験
AWS WEB問題集だけではやや問題数が足りないので、公式模擬試験も受けます。
Skill Builderから無料で受けられるようになっています。
6.Black Belt サービス別資料
今回の分野でメインサービスとなる「Amazon SageMaker」については、Basic SessionとAdvanced Sessionの2つのコンテンツが用意されているので、そのどちらも確認しました。
また「AWS AI Service」というコンテンツにはPollyやRekognition、ComprehendのようなAIサービスの概略が説明されているので、ここで各サービスの機能とユースケースを把握しました。
今回学んだこと
「機械学習の知識」と「AWSサービスの知識」の2つに分かれるのが特徴です。
さらに後者は「データ収集(Kinesis/Glue)」、「機械学習(SageMaker)」、「AI/IoTサービス」に分かれます。
データ収集はデータアナリティクスと丸被りなので、その時の勉強法を参考にしてください。
機械学習の知識
まず、機械学習のプロセスは「データ収集」「前処理」「学習」「評価」「予測」の5つからなります。
データ収集はKinesis、Glue、S3の世界なのであまり機械学習独自の知識は入り込まないのですが、それ以降のプロセスでは独自知識が必要になります。
前処理
収集したデータには異常や欠損データが入ったり、明らかに不均衡データになっていることがあり、それらを「クリーニング」してあげることで正しい機械学習モデルを作成する前処理を行います。
前処理としてよく出るのが次の3つ。
- One-Hotエンコーディング:例えば大、中、小のように離散的で数値でないデータを持つ列に対し、3、2、1などの数値に置き換える処理。
- SMOTE:k近傍法というアルゴリズムを使って、不均衡でデータ不足のデータセットを増幅(オーバーサンプリング)する手法。
- 主成分分析法(PCA):教師なし機械学習アルゴリズムを使って、出来るだけ情報を保持しながらデータセットの次元(特徴量の数)を減らし、トレーニング速度の向上、モデルの安定性向上を図る。
学習
■モデル(アルゴリズム)
学習(トレーニング)に入る前に、適切なモデル(アルゴリズム)を選択します。
試験に出てくる可能性があるモデルは次のとおりです。
<教師ありアルゴリズム>
ロジスティック回帰 | 多数の変数から「2値の結果」が起こる確率を予測するモデル。例えば勉強8時間、部活参加せず、スマホ2時間/日の学生が受験合格する確率は?(=合格/不合格の2値の確率) |
---|---|
多変量回帰 | 多数の変数から数値を予測するモデル。もっとも簡単なのは直線回帰(線形回帰)。例えば馬力、燃料タイプ、駆動輪、ドア数に基づいて車の価格を予測する。 |
サポートベクターマシン(SVM) | 回帰にも分類にも適用できる。線形SVMと、カーネルSVMを使った非線形分類機がある。 |
ディシジョンツリー | 決定木。多数の変数から最も効果的な分岐を自動選択し、その分岐に従ってデータを分類しツリー状に表現する分類アルゴリズム。非線形分類機。 |
ナイーブベイズ | ベイズの定理という確率論の定理を基にした分類アルゴリズム。メールのスパム判定などに利用。 |
<教師なしアルゴリズム>
K-means | 1つのグループのメンバーができるだけ類似し、他のグループとできるだけ異なるK個のグループに分ける。クラスタリング。 |
---|
再帰型ニューラルネットワーク (RNN) |
ニューラルネットワークを拡張して時系列データを扱えるようにしたもの。 店舗の日次売上などのデータ傾向/周期を学習し、今後の変化を予測する。 |
---|---|
畳み込みニューラルネットワーク (CNN) |
畳み込みによる局所的な特徴の抽出、位置普遍化を繰り返すことで画像のパターン認識を行う。 |
<自然言語処理>
TF-IDF(単語出現頻度-逆文書頻度) | ドキュメント内の単語の重要度を決定する。 TF(Team Frequency)は文書内の単語出現頻度。 IDF(Invercse Document Frequency)は一般文書に多数出現する単語ほど重要度が下がるスコア。 |
---|---|
Bag-of-Words | ドキュメントの単語出現回数をベクトル表記したもの。 |
N-Gram | ドキュメント内の複数単語のフレーズを抽出するために使用。 Nで指定した単語数に先頭から1単語ずつ文字列を分割する。 |
直角のスパースなバイグラム(OSB) | テキスト文字列解析支援が目的。 バイグラム(N-GramのN=2の場合)に変わるデータ変換アルゴリズム。 |
■ハイパーパラメータ
モデルを決めたらトレーニングさせます。次のようなハイパーパラメータ(=トレーニング前に調整可能な設定)を最適化することでモデルの精度を上げていきます。
- エポック数:1つのトレーニングデータを何回繰り返して学習させるか。
- 学習率:1度の学習で重みやバイアスをどのくらいの幅で変動させるか。
- バッチサイズ:トレーニングデータを複数に分割するときのデータ数。いきなり大きいバッチサイズだとモデルの特徴は平均化されすぎる。
このハイパーパラメータのチューニング方法として大きく4つあります。
SageMakerで使えるのはランダム検索とベイズ検索のみですが、原則後者のほうが精度が良いです。
- 直観/経験:完全でも効率的でもない。
- グリット検索:ハイパーパラメータの組み合わせを網羅的に試行。完全だが非効率。
- ランダム検索:ハイパーパラメータの組み合わせをランダムに試行。
- ベイズ検索:ベイズ最適化手法を使って過去の評価結果からより良い結果が得られそうなパラメータの組み合わせを見つける。
■過学習
試験で良く出るのが「過学習」です。トレーニングデータに対しては非常に高精度の予測結果となるのですが、未知のデータに対しては精度が低い状態のモデルのことを指します。
シンプルに単一変数に対する回帰問題を例にします。
トレーニングデータを過剰に学習すると、細かい変動までモデルに取り込んでしまい左グラフのようにモデルが高次関数化します。
するとトレーニングデータに対しては100%に近い予測値が得られますが、赤丸の新しい値を投入すると精度が落ちてしまうことがあります。
これが過学習です。
一方、右グラフのような低次関数にするほうが程よく変動が取り除かれてモデルがより一般化され、未知のデータに対してより精度が高い予測が得られます。
試験で良く問われるのですが、次のような過学習への対策です。
- 正規化:学習データを正規化する。L1正規化は一部のパラメータを0にしてしまうこと。L2正規化はパラメータの大きさを0に近づけること。
- ハイパーパラメータ調整:モデルの複雑さ(階層など)を定義するパラメータでよりモデルを簡単なものに変更する。
- 早期停止:学習ジョブを早期停止して過学習するまえに学習をやめる。
- ドロップアウト:深層ニューラルネットワークにおける重み更新の際に一定の割合でランダムに枝を無効化する。
評価
トレーニングしたモデルに対して、テストデータを使ってどのくらい精度が出ているか評価します。
その評価方法が試験で問われます。
■分類問題の場合
シンプルに二項分類(正か負か二択の分類)で考えます。
モデルが予測した結果は上の4象限のいずれかに属することになります。
TP(真陽性)とTN(真陰性)は予測が正解しているので、極論これに属する結果を増やせばよいです。
それを評価する指標が正解率(Accuracy)です。
正解率(Accuracy)=(TP+TN)/(TP+FN+FP+TN)
シンプルに全予測数に対する正解した予測数の割合ですね。
しかし、要件によっては「正と思われる人を高精度に予測したい」というケースがあります。
例えば、とある商品を購入すると思われる人を予測するモデルです。正(=商品を購入する)と予測した人が本当に正なら営業効率が爆上がりしますよね。
この場合に重要なのは「正と予測したものが本当に正である確率が高い」ことです。負(=購入しない人)に関する精度は重要ではありません。
それを評価する指標が適合率(Precission)です。効率性の指標を意味します。
適合率(Precission)=(TP)/(TP+FP)
一方で「正であるものを漏れなく予測したい」という要件もあり得ます。
例えば、健康診断で精密検査が必要な患者を判定するモデルです。実際に正(=精密検査が必要な患者)の人を漏らしてしまうと問題になるため、多少精度を欠いても「本当に正である人を漏れなく正と予測する」ことが重要です。
それを評価する指標を再現率(Recall)または感度(Sensitivity)といいます。網羅性の指標です。
再現率(Recall)=(TP)/(TP+FN)
適合率と再現率はトレードオフの関係になっています。
極端に言えば、全件正だと予測すれば再現率は100%になりますが、FP(偽陽性)が増えるので適合性は下がります。
逆に適合性を上げようとして自信があるものだけを正と予測すると、FN(偽陰性)が増えて再現率が下がります。
このようにトレードオフの関係の2つの指標を横断的に評価するときに調和平均の考え方を用いることがあります。
適合率と再現率にそれを適用したものがF1スコアです。
F1=2*Precision*Recall/(Precision+Recall)
■回帰問題の場合
回帰問題の場合は損失関数という指標で評価します。
損失関数にはいくつかの種類があるのですが、概して「予測と実測値のずれの大きさ」を示しています。
最もメジャーなのが二乗平均平方根誤差(RMSE)です。小さいほど良いモデルです。
yは実測値、yハットが予測値、nは予測データ数です。
パッと見は難しく見えますが、予測と実測値の誤差を二乗することで正値化し、それをデータ数で割って平均化した後に二乗した分をルートでスケールを戻しているだけです。
AWSサービスの知識
途中でふれたようにKinesisやGlueに関する問いも出てきますが、データアナリティクス試験と範囲が重複しているため、ここでは割愛し、その他のサービスについて触れておきます。
SageMaker
言わずもがなの機械学習サービスです。
S3と統合されており、S3内のデータセットを基にモデルを学習させます。
SageMakerはノートブックというEC2インスタンスからWEB操作するのですが、デフォルトではAWS管理下のVPCに実装されます。加えて、PrivateLinkを使うことでユーザ管理のVPCにアタッチもできます。
このあたりの説明は下記サイトに任せます。
重要キーワードはこちら。
- 推論パイプライン:前処理用、分類用、後処理用のようにSageMakerの複数ステップを組み合わせてパイプライン化する機能。
- Elastic Instance:CPUのみのEC2インスタンスにGPUで機械学習するためのアクセラレータをつける機能。フルGPU化するよりも低コスト。
また、SageMakerには多数のビルドイン・アルゴリズムがあります。
これを使うことでスクラッチで実装することなく、ハイパーパラメータのチューニングだけでモデル構築することができます。
試験ではこのビルドイン・アルゴリズムの特徴とユースケースを非常に多く問われます。
下記がすべてではないですが、試験に出題されがちなものをピックアップします。
Linear Learner (線形学習者) |
線形モデルを使って、回帰・分類問題の両方に使用できる教師あり学習アルゴリズム。 |
---|---|
Factorization Machines (因数分解機) |
回帰・分類の両方に使用できる汎用的な教師あり学習アルゴリズム。 とある広告がとあるページに配置されたときのクリック数の予測などに利用。 |
XGBoost | 勾配ブーストツリーアルゴリズム。教師あり学習アルゴリズム。 決定木による複数の弱いモデルを直列に組み合わせて予測を強化。分類・回帰ともにOK。 |
seq2seq | 入力が一連のトークン(テキスト、音声など)で、出力が別の一連のトークンとなる教師ありアルゴリズム。RNNおよびCNNを使っている。 例えばテキスト要約、音声認識などで利用。 |
K-means | K近傍法。データセットをK個のグループにクラスタリングする教師なし学習アルゴリズム。 |
Object2Vec | カスタマイズ可能な汎用ニューラル埋め込み教師あり学習アルゴリズム。 例えば人と映画の関係性を学習し、まだ見ていない映画に何点の評価をつけるか予測。 |
LDA (潜在的ディリクレ配分) |
一連の観測値を異なるカテゴリの混合として記述する教師なし学習アルゴリズム。 多数のドキュメントからトピックを検出、テキストのグループ化に利用。 |
Neural Topic Model (NTM) |
ドキュメントを統計分布に基づいた単語グループに編成する教師なし学習アルゴリズム。 例えば、自転車・車・電車・距離・スピード等の単語が頻出するドキュメントは「交通」関連である可能性を検出する。 |
DeepAR予想 | 再帰型ニューラルネットワーク(RNN)を使って時系列データを予測する教師あり学習アルゴリズム。 |
BlazingText (word2vec) |
単語を分散ベクトルにマッピングする教師あり学習アルゴリズム。 例えば意味的に類似している単語を近接したベクトルとして表現し検出する。 |
AIサービス
AWSには、既に学習済である多数のAIサービスを利用できます。
これらの機能の違いとユースケースも試験では問われます。
Lex | Alexaのバックサービス。A"Lex"aで覚えやすいサービス名かと。 音声やテキストを使用して任意アプリに対話型インターフェースを提供する。 |
---|---|
Forecast | 機械学習を用いて時系列データを予測する。 SageMakerのDeepAR予想アルゴリズムと類似するが、より簡易に使用可能。 |
Rekognition | 深層学習に基づいた画像、動画分析サービス。 |
Textract | 言語の翻訳サービス。ディープラーニングモデルを使用。 |
Comprehend | テキストから感情分析、トピック形成、キーフレーズ検出などを行う自然言語処理サービス。 |
Polly | 入力したテキストを自然な音声に変換するサービス。日本語も対応可能。 発音レキシコン(語彙目録)で独自単語の発音をカスタマイズするが、 レキシコンが日本語対応してないため、SSMLのsubタグで個々のテキストに読み方を定義。 |
Transcribe | 自動音声認識を使って音声をテキストに変換するサービス。 |
Personalize | レコメンドサービス。協調フィルタリング(ユーザのトランザクションデータを基にレコメンドする手法)。 |
IoTサービス
出題数は少なめですが、IoTサービスについても出題されます。
IoT Core | IoTデバイスを簡単、安全にクラウドアプリやその他デバイスと通信できるようにするサービス。 |
---|---|
IoT Analytics | IoTデータを大規模に収集、前処理、保存、分析、可視化するマネージドサービス。 |
IoT Greengrass | AWS上で作成・トレーニングされたモデルをローカルデバイスで実行できるようにするサービス。 |
まとめ
11冠達成し、すべてのAWS認定に合格できました!
とはいえ、まだAWSスペシャリストに慣れた実感は無く、主なサービスの機能概要とユースケースを知って、ようやくAWS技術者としてのスタートラインに立てたかなという感じです。
まだまだ自分自身で触れたことが無いサービスがほとんどなので、引き続きできる限り自分の手を動かしながら学習を継続していきたいと思います。