How I passed AWS Certified Machine Learning - Specialty (合格体験記)

*I decided to keep this article in Japanese. If you were expecting this to be English, you may go with the Google Translate extension on Chrome. Please feel free to reach me out via [LinkedIn](https://www.linkedin.com/in/norifumi-irie-9bbb0388/) as well for any inquiries.

 # 概要
2023年2月にAWS Certified Machine Learning - Specialty(MLS-C01)を受験しました。合格できましたが、AWSの最近のサービスに関することなど全くわからない問題もありました。今回は自分の試験勉強を振り返りつつ、ベストな対策方法や今回の試験で初めて見た問題に関する資料を紹介します。
自分は英語で勉強・受験したため、この記事で使う用語等も誤訳がないようなるべく英語のまま紹介します。

# 勉強開始前の状態
### Data Engineering周り
本職でビックデータ周りのETL Job設計をAWSのサービスを使ってやっていたので、Redshift, S3, QuickSight, Athena, EMR, RDSあたりは日常的に触れていました。この試験にはでないですが直近ではMWAAというPythonベースのJobのWorkflow Management Toolを使っていました。
AWSのインフラ周りの知識に関してはAWS Cloud Practitionerの資格を有しているぐらいでした。
あとは個人でRaspeberryPiサーバーを持っていて、Linux、Docker周りもそれなりの知識がありました。

### EDA周り
大学院ではExploratory Data Analysis、 PCAによる次元削除、Linear Regression Modelの構築をメインとした研究をしていました。

### 機械学習周り
そもそも今回受験に至ったきっかけにKaggleのコンペがありました。何度か挑戦しましたが構築モデルのHyperparameter TuningやFeature Engineering、Overfittingの対策等の知識が断片的すぎて苦戦して撃沈していました。
AWS MLの試験ではOverfittingを検知したらどうするか等のModelingに関するGenericな質問が36%を占めているためAWSサービスを使わない人にとっても有意義なものになっています。

# 対策方法
### 0) 機械学習に触れてみる。

この試験で学ぶことは以下のような課題に直面したことのある人にとって有意義なものだと思いました。
- Kaggle等のAIコンペで勝てない
- モデルをトレーニングした際にValidation Dataの精度が上がらない
- トレーニングデータの特徴量が多すぎて処理できない
- Imbalanceなデータに対してどうしていいかわからない
- 欠損値があったり値の大きいFeatureをどう処理するのがベストかわからない

経験のない方は、Kaggleのコンペに参加してみたりAI実装検定B級、G検定を受ける、またはUdemyやCourseraでTensorflow、Pytorch、MXNetの学習をする等をおすすめします。

### 1) Exam Guideにさっと目を通す
自分は機械学習に触れていたので、まず[公式](https://aws.amazon.com/certification/certified-machine-learning-specialty/)にあるExam Guideを読みました。正直これをはじめに読んでも対策前の人間にとってはさっぱりだと思います。さっとだけ目を通しましょう。試験対策を十分にした後はすっと理解できるようになっているはずです。受験2週間前、1週間前、直前と何度かこのExam Guideを見直して、読めるようになっているかを確かめることをお勧めします。

### 2) 公式の試験準備コース
AWS公式のe-Learningサイト[Skillbuilder](https://explore.skillbuilder.aws)の`Exam Readiness: AWS Certified Machine Learning - Speciality`という本来有償のコースが2023年2月時点では無償で受けられました。これが例題・問題付きでよくまとまっていて秀逸でした。自分は1周した後も自信のない部分を読み返しました。例題・問題は試験直前にもう1周しました。
解答が腑に落ちない場合、ググって特にAWS公式の関連記事にじっくり目を通すとよいです。
UdemyやYoutubeにある対策講座を受けるよりこちらをお勧めします。

### 3) 公式の模擬試験
Skillbuilderにて、`AWS Certified Machine Learning - Specialty Official Practice Question Set (MLS-C01 - English)`という計20問の模擬試験を受験できます。自分はこれも2周しました。
AWS公式は別に計10問の[サンプル問題](https://d1.awsstatic.com/training-and-certification/docs-ml/AWS-Certified-Machine-Learning-Specialty_Sample-Questions.pdf)も出しています。1周した後自分はこの存在を忘れていましたが、2周解いてもいい良問でした。

所感ですが、公式が出しているこれらの問題は本番よりもやや簡単めだと思いました。確実に8割は取れるようにしておきましょう。腑に落ちない場合は「ググって深堀り」が基本です。情報は全てインターネットに落ちています。わからない問題があったら自分に連絡ください。一緒に考えましょう。

### 4) Testprepの練習問題集
あまり知られていませんが、[Testprepの練習問題集](https://www.testpreptraining.com/aws-certified-machine-learning-specialty-practice-exam)が秀逸でした。日英両方でいろいろな方の合格体験記を読みましたがあまり紹介されていないと思います。料金も11.99USDと格安で、60問のテストセットが８つもあります。しかも、本番にも出てくるような良問がたくさんありました。自分は最初の４セットを2周した時点でテスト日が来てしまったので終わりきりませんでした。このおかげで合格したといっても過言ではないです。
一方で注意点もあります。というのも、問題がじゃっかん古いです。おそらく2021年前後に作られた問題なのかと思います。OverfittingやRegularizationなどGenericな質問なら問題ないのですが、日々進化していくAWSのサービスに関する質問の解答は100％鵜呑みにできません。
例えば、AWSのBuilt-in AlgorithmのCapability(読み込めるFile形式やDistributed Training)は解答と公式で食い違っているような箇所がありました。ちなみに、[AWSのBuilt-in AlgorithmのCapability](https://docs.aws.amazon.com/sagemaker/latest/dg/common-info-all-im-models.html)は暗記マストです。しっかり覚えていきましょう。

### 5) Digital Cloudの対策講座
[Digital Cloud Training](https://digitalcloud.training/)というUdemy講師でもあるNeal Davisが提供しているeラーニングPlatformで、同試験のPDF形式で要点がまとまったチートシート・計120問の練習問題・ビデオトレーニング全部込みで約30USDで提供されています。
チートシートは要点がしっかり書かれていてよかったです。暇なときや待ち時間に何度も目を通しました。ビデオトレーニングは個人的には知っていることが多かったのと公式の試験準備コースで十分だったためほぼ見ていませんが、Neal Davisは良い講師です。質は高いと思います。
練習問題ですが、文章が本番に比べてめちゃくちゃ長いです。
例えば以下のような問題があります。

Q:
A company specialized in ocean creatures’ exploration received enough funds to initiate an exploration project in the Mariana Trench which is the deepest oceanic trench on Earth. The project’s objective was to explore new creatures and also build a machine learning model to classify these creatures from images.

High resolution images were taken from a camera which was previously implanted by the company in the Mariana Trench. A machine learning specialist is about to train a model on these high-quality images using GPU based instances on Amazon SageMaker. A mini batch size of 128 was chosen for training on a single GPU which was sufficient, however the company wants to speed up the training of the project as per deadline.

What is the most efficient technique that the specialist should use?

本番ではこんな長文はなかなか出会えません 笑
ですが、良く考えさせられる問題が多いです。個人的には本番よりもKaggleに役立つ感覚があって好きでした。
ちなみに自分は全問題を2周しました。

### 6) AWS公式のMachine Learningのブログを読み込む
試験には[AWS公式のMachine Learningのブログ](https://aws.amazon.com/blogs/machine-learning/)を元にした問題がいくつか出題されます。Security関連（例えばVPC Peering、 NAT Gateway、 AWS PrivateLink）とAWSの新しいサービスの導入事例のブログは特に要Checkです。自分はパラパラと目を通して、これはテストに出そうだな、と思ったブログだけいくつかじっくり読みました。

# 学習期間・時間の目安
自分の場合なのであまり参考にならないかもしれませんが、どのくらい勉強したかを一応共有します。
まず、申し込んでから受験まで３週間でした。
1日だいたい1時間机に座って「練習問題⇒ググる⇒わからないところをFlashCardにメモして覚える」をやった他、電車の中や妻を待っているときにFlashCardを眺めたり、上に紹介した練習問題をスマホから解いていました。
数学チックな問題はあまりないので机に座らなくても勉強できます。
勉強土日は遊びに出かけていたのでほとんど勉強していませんが、スノボにいった行き帰りの新幹線なども問題を解きました。
最後の1週間は1日2時間しっかりやっていました。

1時間×10日(土日を除いた最初の2週間)+2時間×7日=24時間
に加えて、移動時間などでの勉強も含めると約30時間ぐらいかと思います。

# 本番で出た試験対策でカバーしていなかった問題について
以下、試験後に取った自分のメモです。英語で取っていたので日本語に訳しました。
1. Amazon Knesis Data Streamingだけがreal-time dataを処理できるソリューションではない。AWS Managed Streaming for Apache Kafkaも視野に入れる必要があった。
https://docs.aws.amazon.com/whitepapers/latest/big-data-analytics-options/amazon-msk.html
2. Amazon Personalizeのレシピは暗記すべきだった。User-PersonalizationレシピとPersonalized-Rankingレシピの違いを知らないと回答できない問題があった。
https://docs.aws.amazon.com/personalize/latest/dg/native-recipe-new-item-USER_PERSONALIZATION.html
https://docs.aws.amazon.com/personalize/latest/dg/native-recipe-search.html
3. DynamoDBにはデータ容量の制約がある。大容量の画像データを保存するときはほぼ確実にS3を選択すべき。
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-use-s3-too.html
4. A2IとGround Truthの違いを知っておくべきだった。
https://aws.amazon.com/augmented-ai/
5. SageMakerでImage Classification Modelを構築する際に画像形式(.png, .jpg等)のトレーニングデータを使用する場合、`.lst`ファイルを食わせる必要がある。RecordIO形式(.rec)であれば、`.lst`はいらない。`.lst`にはどんな情報が入るのかも知っておくべき。
https://docs.aws.amazon.com/sagemaker/latest/dg/image-classification.html
6. AWS Feature StoreとAWS Data Wranglerというサービスがある。
https://aws.amazon.com/sagemaker/feature-store/?sagemaker-data-wrangler-whats-new.sort-by=item.additionalFields.postDateTime&sagemaker-data-wrangler-whats-new.sort-order=desc
7. On-premiseサーバーのDataをCloudにMigrationする際、Snow FamilyとDatasyncをどううまく使うのかを深く理解しておくべきだった。特に、移行時にGPU-drivenなpreprocessingが必要な場合、それをSnow Familyでやるのか、DatasyncでCloudに送った後にやるのか判別できる知識が必要だった。
https://aws.amazon.com/blogs/storage/data-migration-best-practices-with-snowball-edge/
    ちなみに自分はGPU搭載のSnowball Edgeデバイスを購入してSnowball Edge側に処理をさせる回答を選びましたが、正解だったのか未だにわかりません。。

# 結論
以上、AWS Certified Machine Learning - Specialty合格体験記でした。
合格できるレベルに機械学習に関する知識や理解が増えたことで、Kaggleのコンペもよりよい結果が残せそうです。
試験に関する相談や質問があれば、[LinkedIn](https://www.linkedin.com/in/norifumi-irie-9bbb0388/)に連絡ください。

Peace!