はじめに
Team AIでは世界のAIエンジニアの働き方を研究し、理想の働き方であるロールモデルを継続的に紹介したいと思います。
再ブームが来て間もないAI業界。スタンダードが未整備な部分が多々あります。
- 業界の標準賃金はいくらか?
- 初心者・中級者はどうやってスキルアップすればいいのか?
- AIエンジニア vs データサイエンティスト vs 研究者はどう違うの?
一つ一つ、皆さんの疑問に答えながら、スキルアップ・キャリアアップに繋がる情報インフラを整備して行きたいと思いますので、是非みなさんの意見もお聞かせください。
今日ご紹介するのは、素晴らしい教育コンテンツで有名なUdacityのブログより、よく聞かれる"機械学習エンジニアのスキル定義”に対する回答です。
Team AIとしては;
- 数学理論の理解 (統計・確率・線形代数・微分積分)
- Kaggleや実地でのデータ分析経験(仮説構築・データ前処理・モデルの選択と実装)
- プログラミング経験(数学理論をPythonやRでコーディングする)
だと思っていますが、下記Udacityの見方は非常に細部に渡っており、
いかにも米国的な網羅性があり興味深いです。
将来的に、業界標準を作るべく検定や問題集を作っていければと思っていますので、
みなさまご指導宜しくお願いいたします。
(引用)
1.コンピュータサイエンスの基礎とプログラミング
機械学習のエンジニアにとって重要なコンピュータ科学の基礎は、データ構造(スタック、キュー、多次元配列、木、グラフなど)、アルゴリズム(検索、並べ替え、最適化、動的プログラミングなど)、計算能力と複雑さ(P対(NP、NP完全問題、big-O表記法、近似アルゴリズムなど)、コンピュータアーキテクチャ(メモリ、キャッシュ、帯域幅、デッドロック、分散処理など)プログラミングの際には、適切な方法でそれらを適用、実装、適応、またはアドレス指定することができなければなりません。練習問題、コーディング競技会、ハッカソンはスキルを磨くのに最適な方法です。
2.確率と統計
確率(条件付き確率、ベイズルール、尤度、独立性など)の正式な特徴付けやそれから得られる技術(ベイズネット、マルコフ決定プロセス、隠れマルコフモデルなど)は、多くの機械学習アルゴリズムの中心にあります。これらは現実世界の不確実性に対処する手段です。(平均、中央値、分散など)、分布(一様分布、正規分布、二項分布、ポアソン分布など)および分析方法(ANOVA、仮説検定など)を提供する統計の分野です。観察されたデータからモデルを構築し検証するために必要なものです。多くの機械学習アルゴリズムは基本的に統計的モデリング手順の拡張です。
3.データモデリングと評価
データモデリングとは、有益なパターン(相関、クラスタ、固有ベクトルなど)を見つけたり、以前に見えなかったインスタンス(分類、回帰、異常検出など)を予測する目的で、与えられたデータセットの基礎構造を推定するプロセスです。 )。この見積もりプロセスの重要な部分は、与えられたモデルがどれほど良好であるかを継続的に評価することです。現在の仕事に応じて、適切な精度/誤差の尺度(例えば、分類の対数損失、回帰の二乗誤差の二乗など)と評価戦略(トレーニングテストの分割、順次ランダム化されたクロスバリデーションなど)。反復学習アルゴリズムは、しばしば結果の誤差を直接利用してモデルを調整する(例えば、ニューラルネットワークの逆伝播)。
4.機械学習アルゴリズムとライブラリの応用
Machine Learningアルゴリズムの標準実装は、ライブラリ/パッケージ/ API(scikit-learn、Theano、Spark MLlib、H2O、TensorFlowなど)を介して広く利用できますが、それらを効果的に適用するには、適切なモデル(decision tree、サポートベクトルマシン、複数のモデルのアンサンブルなど)、データに適合する学習手順(線形回帰、勾配降下、遺伝的アルゴリズム、バギング、ブースティング、および他のモデル特有の方法)、ならびにハイパーパラメータ学習に影響する。また、さまざまなアプローチの相対的な長所と短所、およびあなたを旅行することができる多数の問題(偏りと分散、過不足、不足データ、データ漏れなど)に気づく必要があります。データサイエンスや機械学習の課題Kaggleはさまざまな種類の問題とそのニュアンスに晒される素晴らしい方法です。
5.ソフトウェア工学とシステム設計
終わりには、マシンラーニングエンジニアの典型的な出力または成果物はソフトウェアです。また、しばしば、製品やサービスのより大きなエコシステムに適合する小さなコンポーネントです。これらのさまざまな部分がどのように連携し、それらと通信するか(ライブラリ呼び出し、REST API、データベースクエリなどを使用して)、他の人が依存するコンポーネント用の適切なインターフェイスを構築する必要があります。ボトルネックを避けるために、慎重なシステム設計が必要な場合があります。ソフトウェア設計のベストプラクティス(要件分析、システム設計、モジュール性、バージョン管理、テスト、ドキュメンテーションなど)は、生産性、コラボレーション、品質、および保守性にとって非常に重要です。
(引用終)
下記出典からGoogle自動翻訳で上記を生成しました;
https://blog.udacity.com/2016/04/5-skills-you-need-to-become-a-machine-learning-engineer.html