機械学習

Courseraの「機械学習」を受講したら、なかなか素晴らしかった件。

coursera機械学習感想

一部、エンジニア界隈で評判が良いCourseraの「機械学習」を受講し、完走しました。

coursera機械学習受講証Coursera 機械学習 修了証(名前は伏せてあります。)

内容が素晴らしく「受講して良かった」と思ったので、その概要について記載します。

なお、本記事の読者はある程度、機械学習の用語に関して知識がある方を想定してます。

Courseraの「機械学習」とは?

そもそもCourseraとは、スタンフォード大学が主催するMOOC(Massive Open Online Course)(大規模公開オンライン講義)で、様々な分野について一流の講師の授業をオンラインで受講することができます。

https://www.coursera.org/learn/machine-learning

その中でも機械学習(machine learning)の講座はエンジニア界隈で評判が良く、しかも無料で受講することができます。

※ただし上に貼り付けた修了証の発行は有料です。私が発行してもらった時点では8521円程度でした。(linkedinなどに貼り付けて就職活動に使えるようです。)

受講した動機

元々の職種は、SIerですが、辞める二年ほど前に会社が流行に乗ろうとして急遽、機械学習(厳密には定義は違いますがいわゆる巷で言う所のA.I.)をやろうと言う事になり、そのメンバーに選定されました。

そんなわけて、付け焼き刃のなんちゃってデータサイエンティストを約二年ほどしていたのですが、ぶっちゃけほぼほぼ素人でした。

なんかよくわかってなくても、お客さんからデータもらって、ライブラリ使ってプログラム動かして、それっぽいパワーポイントの資料を書けば、やった風な感じになりました・・・(それでン百万円とか・・・)

そんな感じなので・・・

  • 専門的な話になると、お客さんと話してて言葉が詰まる。特にお客さんの部門がデータサイエンス部門だったりした場合にボロが出る・・
  • 進め方が「いきあたりばったり」なので、正しいことをしているのかどうか迷子になる事が多々ある。
  • 実際の解析作業自体は分析を専門にやっている会社に依頼するケースもあったが、その会社のメンバーと会話がちゃんとできない、依頼した時の適正価格がわからない、ナメられる(?)ケースがある・・・

などなど、かなり綱渡り状態で仕事をしていたので、常々、本当の基礎を身につけたいと思ってました。

もちろん自分自身でも勉強したし、研修も受けたりもしましたが、なかなか満足の行くような体系だった学習ができておらず、常に曖昧な知識のままやっていたような気がします。

このCourseraの「機械学習」も噂では聞いて知ってましたが、公私ともに色々あり、なかなか受けることができませんでした。(言い訳なのはわかってます。働きながらやりきってる方、尊敬します。)

そして現在、時間もできた事で、今後、フリーランスとして生計を立てる糧とするために「やっておいて損はないのでは?」と思って受講する事にしました。

講座の概要

本講座は、11週で完了することを想定しており、1週ごとに期限が設けられています。

時間的には1週分でも丸1日使えば完了できるくらいなので、チョチョイと半月ぐらいで終わらそうかと思ってましたが、いざやると頭がパンクしてそんなに連続でできないので、結局10週かかりました。

以下に本講座の各週の講座の概要を記載します。(表内でリンクになっている箇所は、個別記事を書いてます。)

項目 キーワード
機械学習、教師あり学習、教師なし学習、線形回帰、単回帰分析、損失関数、最急降下法、線形代数、行列計算
2 重回帰分析、正規化、多項式回帰、正規方程式
3 ロジスティック回帰、正則化、多クラス分類
4 ニューロン、脳、非線形仮説、多クラス分類
5 フォワードプロパゲーション、バックプロパゲーション
6 バイアス、バリアンス、学習曲線、教師データ、交差検証データ、テストデータ、エラー分析、適合率、再現率、
7
  • サポートベクターマシン(SVM)
SVM、カーネル
8
  • 教師なし学習(k-means法)
  • 次元削減
教師なし学習、k-means法、次元削減、主成分分析(PCA)
9
  • 異常検知
  • レコメンドシステム
異常検知、レコメンドシステム、コンテンツベース手法、協調フィルタリング
10
  • 大規模機械学習
ミニバッチ学習、オンライン学習、確率的勾配降下法、map reduce、並列化
11
  • 適用例:OCR
OCR、パイプライン、Ceiling分析

講座の中で感銘を受けた点

以下、本講座の内容で取り分け感銘を受けた点について記載します。

機械学習の分類について(第1週)

大体の書物やネットで機械学習を「教師あり学習」「教師なし学習」「強化学習」で3分類してます。

機械学習を仕事で始めた当初、この分類方法が私を非常に混乱させました。

「教師あり」「教師なし」の分類に続いて、明らかに異質の「強化」とか出てきて、「何なの?結局、強化学習は教師ありなの、なしなの?、そのどちらでもないの?(どちらでもないとはどう言う事?)・・」と思いました。

本講座では、機械学習を大きく「教師あり学習」「教師なし学習」の2つに分類して、その他については、多く言及してません。

実際の業務では強化学習を使う機会はまだ少ないですし、「教師あり/なし」の分類と、強化学習は明らかに違う基準の分類なので、最初はそのほうがわかりやすいと思います。

分析手法について(全般)

仕事では、「分類問題」では馬鹿の一つ覚えのように、ランダムフォレストやXGBoostを使ってました。

ただ、この講座では、自分自身では基本的だと思っていたこれらの決定木関連の手法は最後まで登場しません。

教師あり学習の分類問題で登場するのは、ロジスティック回帰、ニューラルネットワーク、SVM(サポートベクターマシン)のみです。

にも関わらず、本講座を受講した後では、これらを使えば大体の問題には対応できるように思えたし、実際にそうなのだと思います。
(kaggleのように精度を小数点単位で追及するならば別ですが・・)

この講座では手法選択よりも大切な事を教えてくれます。

※なおロジスティック回帰、ニューラルネットワーク、SVMの中ではどういった場合にどの方法が適しているかについては説明してくれています。

分析で労力をかけるポイントについて(第6、11週)

闇雲に教師データを増やしてもよくならないケースがある事も教えてくれます。

以前の仕事では、とりあえず過学習だろうが精度が悪かろうが、教師データ・特徴量を増やす事が正義だと思ってました。

本講座では、データを増やした方が良い場合、増やしても意味がない場合、特徴量を増やすべき場合、減らすべき場合について教えてくれます。

また最後のCeiling分析(天井分析って訳してる記事多いけど、あってるのかな・・)では、分析のフローの中で精度を上げるためにどこに時間を費やすべきかについてを教えてくれます。(この判断を誤まって精度を1%上げるために莫大な工数をかけてしまった例なども・・)

業務で分析する時に「限られた時間内で何に時間をかける事が有効なのか」を示してくれるのはありがたいです。

データの分割について(第6週)

本講座では、データを教師データ、交差検証データ、テストデータの3つに分ける事を強く推奨してます。

以前の仕事では、データは「教師データ」「テストデータ=交差検証データ」にしか分けてませんでした。

これだと結局、テストデータの結果を元にして、パラメータを調整してしまうので、未知のデータについて適用できるかどうか怪しくなります。

この事については実は顧客からも指摘された事があります。

「結局、そのモデルの良し悪しの評価はどうするの?」と・・・

その問いに対して、別のデータで判定が必要などと回答して、「今後の課題」的にまとめたりもしましたが、顧客からは今ある全てのデータは提供されているので、だいたい、いつも課題で残ったままです。

今思うと「だったら今もらったデータの中でちゃんとテストデータを確保しておけよ・・・」って事ですよね・・

講座受講での懸念点(でも杞憂でした。)

以上のように、本当にオススメの講座なのですが、おそらく多くの方が受講をためらう点が2点ほどあるかと思います。

それはOctaveと英語です。

ただし、私の場合は結果的には、大した障害にはなりませんでした。

Octaveについて

本講座では、プログラミング言語にOctaveという言語を使います。

私も当初は、「なんでそんなマニアックな言語使うんだよ・・普通はRもしくはPythonでしょ・・」と思いました。

ただ、結局、課題をこなすにも、言語の問題でつまづく事はほとんどありませんでした。

課題はメインから呼ばれる関数の中身を埋めていくような感じなので、書くとしても、せいぜい10数ステップです。その程度ならば、ググって基本的な文法とか都度都度、調べればなんとかなりました。

普通に何かしらのプログラム言語をやってる人ならば、そんなに障壁はないと思います。

そして、講座内でも言ってましたが、確かに気軽に扱えて、案外いい言語だなと思いました。

英語について

アメリカの大学の講座なので、全編英語です。

私は、ITに関するQAくらい(Stack Overflowなどのサイト)ならば、なんとか読める程度の英語力ですが、まあ、なんとかなりました。

※リスニング・スピーキングは全くダメ出し、単語がわからない普通の文章も全然だめです。十年前くらいに最後に受けたTOEICは550点くらいだったような・・(記憶曖昧です。)

講義自体は日本語字幕もつけることもできるし(全編、若干、おかしい日本語ですが・・)、プレゼンテーションの資料も見ながらなので、なんとか理解できます。

頭が冴えているときは英語字幕で見たり、疲れているときは頭に入ってこないので日本語字幕にしたり、気合が入っている時は英語の勉強も兼ねて字幕なしで見てみたりとその時の気分によって色々切り替えてました。

ただ、ディスカッションフォーラムは全く活用できませんでしたね・・

やはり発信するためには、作文力が必要なので・・

今思えば、拙い英語でも何かしら質問すれば良かったと思います。

まとめ

本講座、何より講義自体が非常に分かりやすいです。

数学的な背景などは、かなり省略している部分もありますが、いわゆる研究者ではなく、仕事で活用するために機械学習を使う人にとっては、ちょうど良い加減かと思います。

所々、自身を持たせるような事も言ってくれます。

ただ、「シリコンバレーのそこらへんのエンジニアより優秀」とか最後の「これであなたは、機械学習のエキスパートといっていいでしょう」は、言い過ぎかと(笑)

あくまでもこの講座で学んだ内容は基礎だと思いますが、基礎だからこそ本当に重要だと思います。

ここで学んだ事を知っていれば、もっと顧客にとっても有用となる分析ができたかと思います。

会社からいきなり「AIやれ!」と言われたようなSIerの人にはオススメです。