機械学習
MachineLearning
ポエム
エンジニア
coursera

58歳の文系エンジニアがCourseraのMachine Learningを苦労して完走した話

老害と呼ばれそうなお年頃ですが、2018年3月の1ヶ月間でCourseraでスタンフォード大学が提供しているMachine Learning講座を修了しました。定年間近の老兵がどうやってこの講座を完走し、これから何を目指しているのかをお話ししたいと思います。

IMG_2312.jpg

動機(≠動悸)

2月のデブサミ2018で、ウルシステムズの漆原さんの講演を聴いて、一生エンジニアで飯を食っていきたいなら何か新しいことを始めなきゃダメだなと思ったのが始まりです。

2017年は、Xamarinを使ったiOS/Androidアプリ、Raspbian上でC#を使ったREST APIサーバー、さらに、iPhone/Apple Watchに話しかけて機械を制御するVUIなど、製造業に勤めるソフトエンジニアとしてはかなり異質なことをやらせてもらったと思います。

でも、新しいことをやってる感が足りず、何となく消化不良な感じでした。

「新しいこと始めたい…」

稼げるエンジニアを続けていくために、まだまだ新しい技術に挑戦できるぞという自信が欲しい。でもそれ以上に、何か新しくてワクワクするようなものに首を突っ込みたいという衝動が強くなってきました。

スペック

詳細はLinkedInをご覧ください。そこに記載されていない部分をざっとご紹介すると、普通科高校を卒業し、大学は商学部経営学科で会計を学んでいた純粋文系で、子供の頃から算数は苦手です。足し算と掛け算は大丈夫ですが、引き算と割り算が奥さんに笑われるくらい苦手です。

そんな僕が生涯で一度だけテストで百点を取りました。それが微積です。老兵なので高校数学で行列(新指導要領ではドロップしたらしいですね)も習いました。会社では海外事業部に所属しており、TOEICは760点くらいですが客先とのディスカッションなどは文脈がはっきりしてるので不自由なく行えます。逆に食事の席などでの雑談はとても難しいというレベルです。

目的

会社に売り上げを、自分に収入を、という意味で稼げるエンジニアであり続けるためですが、そのためには自分の価値を高める必要があります。一般的に50を過ぎたら歳をとるたびに会社員の価値は下がっていきます。また、一般的な会社の教育体系は40代までの伸びしろを期待できる層をターゲットにしています。したがって老兵は、絶えず価値を向上させる施策を自分自身で老体に鞭打っていかなくてはいけません。

そう考えた時、何を持って価値を向上させるかというと、世間では賑わってるけど社内では凪の状態であれば、そこに突っ込んでいくことで先行者利益を確保できる可能性が高いと思われます。15年前からやってたアジャイル開発が10年後に巨額の案件を受注する原動力になったように。

いま社内(海外含む)には、機械学習の理論やベストプラクティスを体系的に学んだ基礎体力のある人材がいるのかどうかよく分かりません。ただ、このテーマを外国人と英語で話し合える日本人エンジニアがいないとすれば、それは僕にとって大きなチャンスです。要するにこの分野は多分まだ凪凪のブルーオーシャンで、早い者勝ちだったりするんじゃないかと思っています。

一方、仕事として機械学習のニーズはあるのか?というと、これも今のところ良くわかりません。PoCレベルの案件なのか、言葉だけが一人歩きしているのか、本当に機械学習が必要な案件なのか精査が必要かもしれません。とは言っても精査できる人材はどこに?という話ですが…

ということで、この講座を修了し基礎体力をつけたいま、社内でレアな存在になれる可能性はとても高そうです。あとは、自分からも「機械学習できるよ!(震え声)」と積極的にアピールして、チャンスを逃さぬようアンテナを張り巡らし、その時が来たら(泣きながら)使えるようにさらにスキルを深め広げておくことが大事かと思われます。今のところは。

苦労したこと

さて、老兵で文系脳ですので色々と苦労はありました。老眼でよく見えない、集中力が2時間続かない、夜起きていられないという若者には無縁な障害と戦うことがまずは必要でした。しかし、こういった障害も見方を変えるとメリットになったりするのが面白いところです。

例えば、「夜起きていられない」ということは裏を返すと「朝起きるのが早い」ということです。基本的には朝5時半に起きて8時前には会社にいるという典型的なジジイの活動パターンです。しかし、電車は座れるし空いてるので1時間の通勤時間は勉強にちょうどいい。iPhoneで講義を1時間見ればその週の半分くらいのビデオは終わってしまいます。

会社に着いてから始業までの30分及びお昼休みの45分は、続きをみるか見終わったところのノートをつけたり読み返したり復習する。基本的に定時で帰るので帰りの電車も1時間iPhoneで講義を見るかノートを見て復習する。隙間時間だけでも3時間を毎日使えるわけです。

そして、この隙間時間というのが非常によろしい。年寄りは「集中力が続かない」ので、3時間ぶっ続けに勉強するより、30分程度の細切れ時間の方が集中を保ちやすいのです。特に講義のビデオを1時間も見続けたら半分以上は上の空で聞き流してしまいます。英語ですしね。

また、手書きでノートをつけるというのもこれまたいい。集中力が続かないこととも関連しますが、手を動かして字や数式などを書いていると集中を続けやすいという効果があります。シャツのボタンをとめにくいなど細かい手作業に衰えを感じる今日この頃、こういった手先を使って字や数式、グラフなどを書いて覚えるというのもボケ防止の良いトレーニングになります。一石二鳥です。

しかしプログラミング課題だけは困りました。こればかりはまとまった時間を確保しないとコードを書いている途中でぶった切られることになり、次にまた思い出しながら再開するのもコンテキスト・スイッチ・コストが高くついて非常に効率が悪い。おまけに通勤時間にMacBook開いてコード書くわけにもいかない。ということで、主に夜や休日に自宅で、または昼休み時間に取り組んでいました、最初の2週間は。

後半の2週間は、翌年度から異動(出向先から本体に戻る)のためぽっかりと時間が空いてしまいました。今までのプロジェクトは完了して、次のプロジェクトは新年度からでないと始まらないということで、後半の2週間を丸々学習にあて、一気にMachine Learningの講座を終えてしまうことにしました。

元々は、5月のGW前くらいに終了するペースで計画していたのですが、予想外の空き時間ができたのでこれを有効活用させてもらいました。別に遊んでいたわけでもないし上司の許可も得てますし。出向先から本体に戻るということで、残り時間を自由にさせていただけました。感謝です。

苦労した講座

この講座の中で苦労したプログラミング課題は3つあります。まず第一の関門は行列操作とOctaveがよく分からない状態で臨んだWeek3のLogistic Regression、2つ目はWeek5のBackpropagation、3つ目がWeek7のSupport Vector Machineでした。最初の二つは理論としては理解できたのですが、プログラミング課題がとても難しくて各々5時間くらいかかってしまいました。

3つ目のSVMに至っては概念さえよく理解できず何度もビデオを見返しましたが、最終的にそういうことかと腹落ちしたのはこのサイトの説明でした。そしてプログラミング課題は8時間以上かかって2日がかりでクリアしたという情けなさ。

このプログラミング課題の難しさというのは、僕にとっては行列操作の難しさに尽きると言っても過言ではありません。TransposeだとかInverseだとかElement-Wideだとか、常に行列の次元を意識しながら適した形に変えていくことが最初は難しかったです。このプログラミング課題そのものが、行列操作に慣れさせるために作られているのではないかと勘ぐりたくなるくらいに。

プログラミング課題はネットに解答が載っているので探せばいくらでもでてきますが、それでは規約違反ですしエンジニアとして受講している意味がありません。コースのサイトにはResourcesというメニューがあって、そこにTutorialというメンターが書いているプログラム仕様書的な説明があります。そこにはステップ・バイ・ステップで仕様が記述されていますので、行き詰まったらそれを見るようにしました。分からないからといってfor i=1:mのループに逃げず、辛くても行列演算で乗り切ることを目指しました。

まずは、自分で頑張って考えてみる。日本語のサイトも含めて参考文献にも当たって理論を理解する。1問につき1時間頑張ってもダメだったらチュートリアルを見る。大半は1時間で解決できずチュートリアルを見ることになりましたが、これで解けない課題はありませんでした。時間はかかるにしても、脳みそが汗を掻くほど悩み抜いた時間は絶対に自分を裏切りません。僕は今まで36年コンピューター業界で働いてきて、ずっとそのやり方で前に進んできて裏切られたことは一度もありませんので、急がば回れの精神で乗り切りました。たとえ棺桶にくるぶしくらいは入ってておかしくない歳だとしても^^;

結局どうだったの?

やりきりました。そう、やりきったというところが一番のポイントでした。文系、アラ還で機械学習。まだまだ新しいものを追いかけていけるなということも分かりました。そして、AIとか人工知能とかシンギュラリティとかの言葉に踊らされなくなったかな。機械学習の数式とコードを見てる限り、(大きな声では言えませんが)「シンギュラリティ?こねぇよ!」と思うようになりました。研究者レベルのところで何が行われているのか知りませんが、実装レベルでは機械学習に対してお花畑で蝶々と戯れるような幻想を抱かなくなりました。

与えられたデータセットと数式に従って、延々と計算しているだけのコンピュータシステムですよね、機械学習は。ただ、人間にはない根気と集中力で与えられた課題をプログラムとして飽きずに繰り返せる点だけは人間を遥かに凌駕しています。その辺りは昔ながらのコンピュータシステムと変わりありません。しかし、人間にとって未知の知見を発見するためのツールとして役立ってる点が、従来の業務システムと違うものなのかなというのが、1ヶ月間機械学習を勉強してきた僕の感想です。

新たな海原が見えてきたので、来年度からの新しいプロジェクト頑張ります。機械学習の勉強を生かすも殺すも自分次第。定年までの1年半を誠実に楽しく明るく前向きに取り組んでいきます。

最後に、批判を恐れず言わせてもらえば、欅坂46は女性アイドル界に舞い降りた現代の尾崎豊だという思いがこのひと月でさらに強くなりました。去年の紅白での姿には、日比谷野音でPAから飛び降りて骨折した彼の姿が重なります。

僕からは以上です。イマニミテイロ。