JAISTの博士前期課程に進学します

TL;DR

2019年10月から北陸先端科学技術大学院大学(Japan Advanced Institute of Science and Technology: JAIST)の先端科学技術専攻、博士前期課程に進学します。フルタイムでの勤務を継続しつつ、修士情報科学)の学位を目指します。

f:id:fushiroyama:20190713114835j:plain

最大の動機

端的に言うと、この先40年現役でいるための力を養いたいと思ったからです。

以前のエントリに書きましたが、自分は文系学部の学士であり、ソフトウェア技術者として求められる技能はすべて業務内で身につけて来ました。これはそれなりにワークしているのですが、知識はいかにもツギハギであり、時に自分の理解の浅さに恐ろしくなることがあります。

この先の10年は、今までにも増して速いペースでイノベーションが勃興しては消えてゆくはずです。その中にあって、すでに人口に膾炙し書籍で解説されるような知識は競争力となりません。論文を調べて新しいアルゴリズムを自分で見つけ出して実装できるような、根源的かつアカデミックな能力を身につけないと早晩限界がくるなと危機感を覚えています。

それに、これからは人生100年・労働80年の時代が来るなと感じます。僕は今年36歳になりますが、仮に38歳で修士、41歳で博士になったとして1、労働80年時代ではまだ折り返しですらありません。ここでの学び直しという投資は十分すぎるリターンとして返ってくると期待しています。

JAISTについて

石川県に本部を置く国立大学です。
一般的な知名度はそれほど高くないかも知れませんが、情報系の人はLinuxディストリビューションのミラーサーバーで ftp.jaist.ac.jp というドメインに見覚えがあるのではないかと思います。

僕は石川本校ではなく、東京の品川インターシティにあるサテライトキャンパスに通います。

なぜJAIST

明確な理由がいくつかあります。順に書いていきます。

大学院大学

JAISTは「大学院大学」であり、学部を持ちません。このため大学院には幅広いバックグラウンドの生徒が集まります。これには僕のようないわゆる文系出身者や、社会人を経て再びアカデミックの場に戻ってくる人、外国人留学生などが多数含まれます。

大学説明会で見聞きした限り、これらの状況に対処するために修士1年生には比較的みっちりと基礎の足並みを揃えるための講義が集中しているようです。これは僕にとって望むところです。
また修士研究に重きを置いており、修士論文となる主テーマの研究の他に、主テーマと相互に補い合い相乗効果を得られるような副テーマも必修としています2。これは地に足の着いた研究力を養いたいと考えていた自分の志向と合致するところです。

社会人コース

JAISTは社会人コースを設けており、自分もこの区分です。東京キャンパスは品川駅から徒歩5分ほどの品川インターシティ内にあり、自分が進学する情報科学の場合、授業は金曜夜と土日にのみ開講しています。
これが良いか悪いかは個人によりそうです。平日夜に授業がほぼないということは残業が多めの社会人には助かりそうですが、僕の会社のように柔軟な働き方がゆるされ、かつ休日は家族との時間を大切にしているタイプにはチャレンジとなりえます。

とはいえ、授業のメインが平日昼間ではないという時点でたまらなく魅力的であり、時間をうまくやりくりできればフルタイムの社会人として経済的に安定したバックグラウンドを持ちながら修士・博士を目指せる大学は他にそうたくさんあるものではありません。

また、長期履修制度というものが設けられており、端的にいえば修士は2年分の学費で3年、博士は3年分の学費で4年間在籍することができます3。社会人で学位取得を目指す身としてはありがたい制度です。

その他

他にも、国立大学だから学費が安いとか、教育訓練給付制度対象なので標準年限で修了できる人は更に安く通うことができるとか4、友人のJAIST卒業生が皆一様に優秀であるとか5、色々あってJAISTが第一志望校となりました。合格通知が届いて本当に嬉しいです!!

まとめ

最後に、この決断を後押ししてくれたのは妻です。この先修了までには恐らく幾多の困難があると思います。応援してくれた家族に感謝しながら勉学に励みつつ、妻や子供たちとの時間もうまく確保できるように工夫していきたいと思います。先生方、在学生のみなさん、卒業生の方々、色々ご指導ください。


  1. こんなにスムーズに行くとは露も考えていません😅働きながらなので、完遂できるとしても相応の時間が掛かるでしょう。

  2. 主テーマも副テーマも自分で定める。

  3. 長期履修制度 | JAIST 北陸先端科学技術大学院大学

  4. 長期履修制度との併用はできません。

  5. 実はこれが一番大きい動機かも知れません。これはNAIST卒業生の友人にも共通する特徴です。

唐突にYAMAHAルータ愛を吐露する

こんにちは、お父さんです。日本に帰ってきて4月1日からとある多国籍企業で働いております。本当はその辺の話を書きたかったんですが、存外に社外発信について厳しいので面倒くさくなってしまい、職場のことは書かないと決めました。それで、唐突に僕のYAMAHAルータ愛を吐露したいと思います。

僕はYAMAHAのルータが大好きです。僕の技術者としてのキャリアのスタートはネットワークエンジニアでした。当時はまだオンプレの時代だったので、会社の1室にサーバルームがあったり、データセンタの一画にラックサーバを持ってるのが当たり前でした。社員10人以下の典型的SOHO1だったので、YAMAHAのRTX1100を使って小さなネットワークを制御していました。

YAMAHAのRTXシリーズはまさにこのSOHO向けVPNルータとして最強の存在でした。「VPNルータ」と冠していますが、いまやVPN機能を持ったルータは珍しくもなんともないですね。僕がRTXシリーズを好きな理由はたくさんありますが、少し列挙するならば

  • 実売価格10万円以下とお手頃
  • 抜群の安定度
  • PC-UNIXライクな独自のYAMAHAコマンド2による簡潔な設定
  • 柔軟なフィルタ

などがあります。やっぱり、家庭用とは比較にならない安定度ですね〜。ルータ起因でパケット詰まりとかは自分が関わってきた規模では記憶にないです。設定変更のたびに再起動がかかって30秒待つ…みたいなバカバカしいこともありません。即時反映です。ここで比較してるのはあくまで家庭用ですよ。CISCO vs YAMAHAみたいな戦争構図にもっていくつもりはありません😉

これだと単なるカタログのセールススライドみたいなので、もう少し具体的に自分が使ってて便利だった機能を書きましょうか。

マルチホーミング

複数プロバイダを契約して、片方が落ちたときに自動的にもう片方から迂回みたいなことが簡単にできます。 メインで使う高価で信頼性の高いプロバイダ1と、月500円で緊急時のバックアップに使うプロバイダ2を用意して、プロバイダ1のネットワークにkeepaliveしておき3、一定時間/回数応答がないとデフォルトゲートウェイをプロバイダ2のPPインタフェースに向けるというようなことがめっちゃ簡単にできます。

ip route default gateway pp 1 keepalive 1 gateway pp 2 weight 0
ip keepalive 1 icmp-echo 5 3 監視対象IP

ネットボランチDNS

RTXシリーズを使ってるだけで無料で利用できるポーリング不要のダイナミックDNSのようなものです。要は、ルータがインターネット側にもつグローバルIPfoo.bar.netvolante.jp のように名前解決できるようになります。なんでこれが嬉しいか?

ひとつには、自宅サーバのようなことが固定IPなしで非常に簡単にできます。僕のように2000年代前半に自宅サーバをやってたおじさんとしては、このクラウド全盛期においても自分が持ってるグローバルIPは何か有効活用したいと思っちゃうんですけど、ネットボランチDNSで自宅のネットワークがなかば静的に解決できるとStatic NAT機能を使ってLAN内のRaspberry Piなりを一瞬でサーバとして公開できるんですよ。これはホームゲートウェイとしてsshdの入り口にしたり、httpdに向けて自分のパイロット版ウェブアプリを公開したり色んな使い途があります。

もうひとつ、もし外部にサービスを公開しなくても、VPNの対向側をネットボランチDNSで指定できるという絶大なメリットがあります。 僕は東京の家、四国の実家、そしてアメリカの家すべてにRTX1100を置いて拠点間VPNを構築していました。それぞれは固定IPなど持たない普通の家庭用プロバイダなんだけど、ネットボランチDNSでホスト名を指定できるのでPPPoEセッションが切断・再接続されても気にする必要がありません。僕はこれを利用して、アメリカの家では特定のLANポートに接続すると自動的にトンネル越しに日本側インターネットに出るようにしていました4

中古価格が安い

上の方で「実売価格10万円以下」と書きましたけど、これは最新モデルの新品価格であって、僕をプロにしてくれたRTX1100は中古で3000円ぐらいで買うことができます。RTX1100はLAN側インタフェースすら100Mbpsという旧時代感がありますが、その後継モデルでギガビットイーサ対応のRTX1200も中古で1万円ちょっと。ホームネットワークを構築するには余りあるポテンシャルです。

いまはEdgeRouter Xのように廉価で非常に高機能なルータが出てきたので昔よりも色んな選択肢があるかと思うんですが、急に思い出したのでズアーッと書いてみました。ほいでわ👋


  1. いまはSOHOなんて言わなくなりましたね!今となってはスタートアップ企業とほぼ同義だよ!

  2. これは慣れが必要なんですが、見たら意味が分かるシンプルさとCUIだけで完結する手軽さが魅力

  3. 例えばこのプロバイダのプライマリDNSなどにICMPパケットを送るとかね

  4. 参考: 拠点間VPNで日米それぞれのネット環境を活用する - 怠惰を求めて勤勉に行き着く

父、帰国

家族みんなで日本に帰って来ました。3月末付で現職の米国ラボから離れ、誠に勝手ながらそのまま退職する道を選びました。

改めて経緯を整理すると、最大の理由は家族(特に長女)の環境に対する拒絶感が想像より大きく、親として完全にサポートしてやることができませんでした。様々な不運が重なり、娘としては最悪の米国体験となってしまいました。これはたったひとつのサンプルであり、これをもって米国の何たるかを語るつもりはサラサラありません。他の皆さんの米国進出の妨げとならないことを願いつつ、こういうこともあるのだという体験のシェアはしておこうかなと思います。

我々はBurlingameというサンフランシスコ半島の中ほどにある美しい街に住みました。ここはこの辺りではかなり珍しく、白人比率が高くアジア人が少ない特異な街でした。娘のクラスも、アジア系は娘ともうひとりだけ1でした。人種としてマイノリティというのみならず、言葉が満足ではない子供が娘だけという環境下で彼女の絶望と苦労は想像を絶するものがあったと思います。申し訳ないことです。また、先生も本人のコメントによると教師になって2年目ということで、どう好意的にみようとしてもトラブル因子である娘をかなり邪険に扱っていました。これは最後までとても悔しかったです。

先生同士の引き継ぎが不十分で娘がひとりだけお弁当を食べられなかったり、他の子のイタズラのぬれぎぬを着せられたり、クラス内のパーティで娘にだけおやつが配られなかったりと、信じられないような扱いを受けました。怒り、悲しみ、混乱しました。親としてもツライですが、生まれて初めてこんなアンフェアな扱いを受けた娘を思うと夜も眠れなかったです。よく娘と抱き合って泣きながらベッドに入りました。校長も交えて話し合いも試みたのですが、結局のところ校長先生は「担任を信じたい」という立ち位置で、担任は「誤解や勘違い」というスタンスを崩さず、あまつさえ「証拠がない」とまで言い放つ始末で大きく失望しました。

単身赴任ではなく家族みんなで帰国という選択はこれまた極端にすぎると思われる向きもあるかもしれませんが、我が家ではこの点は一貫しています。つまり、パパと離れては暮らせないという長女の意見を常に尊重しました。
結局の所、米国に来たのも「パパと離れ離れになるぐらいなら嫌だけど米国に来る」というものでしたし、日本に帰るにあたっても「パパと離れて私だけは帰らない」という意見でした。このまま居たら娘の精神はどうにかなってしまいそうでしたし、こう言ってはなんですが、女の子が「パパと居たい」と言ってくれるのなんて、せいぜいあと5年でしょう。それならばパパも日本に帰るよということに決めました。

子どもたちは日本で心安く過ごしています。3月も終わり、妻も子どももそして僕も新しい生活が始まります。これからもどうかご指導ください。それでは近い内にまたどこかで。じゃあの。


  1. この子は台湾系アメリカ人の2世なので、人種としてはアジア人というだけで完全なアメリカ人

高い高いの高さ

長女は5歳だが、いまでも「高い高いして〜🤭」とよく言ってくる。もう115cm/20kgぐらいあるので、かなり重たい。先日も高い高いをせがまれたが、ちょうど長女が次女の座るバンボを独り占めしていたので「次女ぴちにも座らせてあげないとパパは高い高いしてあげないよ〜」と次女だけを高い高いして遊んだ。

その時はどうということはなかったが、1時間ぐらいして急にソファーに寝転がってブランケットをかぶったまま出てこなくなってしまった。理由を訊いても「答えたくない…😢」と泣きながらうずくまっている。しばらく時間が空いていたので高い高いとの相関に確証がなく、「パパが何か間違ったことをしたかもしれない。次またしないようにちゃんと理由を知りたいから教えて欲しい」と辛抱強く交渉したが、「わたしが悪いからもういいの…😭」と強情だ。

「お父さんとお母さんもよく勘違いして喧嘩をする。どうでもいい人はそれっきりだけど、お母さんは大切な人だから腹が立ってもちゃんと話し合って解決するんだよ。パパは長女ちゃんとこの先も仲良しでいたいからどうしても理由が知りたい」とお願いしたら、ようやく「わたしも高い高いして欲しかった…😭でも次女ちゃんのおもちゃを取ってたからそれでも仕方ないと思って泣くしかなかった…」と明かしてくれた。

なんといじらしいことか…考えてみると、あと3年もしたらこっちからお願いしたって高い高いなんてさせてもらえないのだ。いまこの瞬間お父さんが必要とされる限り、無条件で受け入れてやればよいのかもしれない。それから、この子なりに「高い高いしてくれなくて悲しかったけど、わたしも悪いことをした」と反省しつつやりきれない気持ちをどうにもできなくて泣いているのが愛らしかった。この子はこういうところがある。幼いのに、自分の気持ちだけに100%純粋に欲望を求めることができない。相手を慮ってしまう。それができれば米国での暮らしもどれだけ楽だったろうと思わんでもない。でもそれでよいのだ。これはこの子の美徳であり長所だ。このまま伸ばしてあげたい。
長女が1歳になって初めて保育園に連れて行くときのことをよく覚えている。向こうから同じように娘を抱っこしたお父さんが歩いてきた。僕は60cmの女の子、向こうは120cmぐらいある女の子をそれぞれ大事そうに抱えていた。随分大きくなってもお父さんにしがみつくんだな〜😅と思ったものだが、ついにうちの娘がそうなり、それでもあの頃と変わらず美しい。これから大きくなるに従って、君から見える高さはお父さんに近づき、世界は相対的に小さく普通に見えていくだろう。それでも君がお父さんに近づきたいうちはいつでも肩の上に乗りに来て欲しい。

天津飯の思い出

と言っても別にチャオズアンソロジーとかではない。

今日はお昼に妻子に天津飯を作ってやった。好評だった。
それはそうだろう。天津飯は僕の得意料理だ。どのくらいの油の量とフライパンの熱で卵に火を入れるとフワッフワの芙蓉蛋の花が咲くか、体が知り尽くしている。

天津飯は京都時代によく作ったものだった。よく作ったどころではない、月末の主食だったと言って過言ではない。
僕は大学生から27歳までのおよそ10年間を京都で過ごした。大学を中退して小さなスタートアップに入社してからはずっと年収300万円で暮らさねばならなかった。若かりし頃というには長すぎる年月だ。

食材は吉祥院業務スーパーで買い込んで自炊をしていたが、それでも月末になると鶏卵の大パックを買うのがやっとだった。
オムレツ、肉なし親子丼など卵料理ばかり得意になった。なかでも、炊きたての米とガラスープと卵があれば180秒で作れる天津飯は僕のお気に入りだった。

ガラスープと醤油と片栗粉を合わせてあんを作っておく。油はフライパンに大さじ2〜3とこれでもかと入れ、白い煙が立つほどチンチンに温める。
卵をさっくりと溶いて一気に流し込む。ほんの6秒。フライパンをするするすると揺すってご飯に載せる。あんをたっぷりかける。これだけ。

あれから年月が経ち、今日の天津飯には海老とキノコまで入っている。
娘が「パパおいしいね!パパはお料理上手だね☺️」と褒めてくれた。決してポジティブ一辺倒ではない自分の天津飯に対する思い出も、今日そう言ってもらえてよい思い出に昇華できたように思う。

子供が急に海外で暮らすということ

やっぱり、インターネットは成功者の話ばかりではなくて厳しい現実の話もあった方がいいと思うので、我が家のことをもう少し書きます。

我が家は僕の海外赴任に家族全員がついてくる形でカリフォルニアに来ています。長女は渡米時4歳、次女は10ヶ月でした。僕がアメリカに来たかった気持ちを100とすると、妻は19、長女は2ぐらいです。パパは来たくて来てるのでつらいことはありません。妻は大変苦しみましたが、素晴らしい友人に恵まれてどうにか折り合いをつけてくれました。次女は元々バブーなのでまだ自我はない。問題は長女です。

長女は日本語の習得が早く、2歳ぐらいで流暢にしゃべりはじめ渡米時にはほとんど大人顔負けの語彙でした。これは大変喜ばしかったのですが、換言すればこの時点で日本語で確たる自我を確立したのだと思います。このせいかどうか分かりませんが、この年齢にしては意外なほどに新しい環境や言葉の違いに対する拒否反応が大きく、順応は困難を極めました。

娘はたまたまTK*1に該当したので渡米後ほどなくして現地校に入れました。これは賛否あると思うんですが、日本人がいっぱいいると却ってその子たちとつるんでしまって言葉を覚えないかもしれないなと思って割と躊躇なくそうしました。ところが娘の場合はこれは完全に失敗でした。娘は誰とも話せない孤独からずっとふさぎ込むようになりました。夜は毎日しくしく泣きました。これは一時的なものだろう、誰でも最初はこうだと思いましたし、実際に同級生の保護者にもそう慰められました。ところが娘は3ヶ月経っても半年たっても良くなることはありませんでした。今なお、土曜の夜からもう月曜日のことを考えて泣くのです。日曜日にすらなっていないのに。時々パニックになってどうしようもない時もあります。

親の都合で自分の意志とは関係なく人生を歪められるというのは親として慚愧に堪えません。娘はまだ耐え難い状況にNO!を突きつけ独りで飛び出す力を持たないのです。こんな残酷なことはない。

あるいは、ある日突然に峠を超えるのかもしれない。その分水嶺を越えたらあれだけ苦しんだ日々は過去のものとなり、この美しく自由な大地を受け入れるのかもしれない。でも"こちら側"にいる我々にはそれがいつなのか分からない。それは永遠に続くかもわからないのだ。

大丈夫!僕は、我が家は大丈夫だった!その言葉に悪意はないのはよくわかっている。だけどその度に、あなたはうちの娘が僕に泣きながら取りすがってどれだけ学校が孤独で苦痛に満ちている場所か訴えてくる姿を知らないだろうと肩が震えるのをどうすることもできない。誰の言葉もわからない、誰にも頼れない。言葉がわからないから休み時間は独りでフラフラ歩いて過ごしてるんだよ〜と言われたときの胸がつぶれる音が聞こえるんですかと。自分が無実の娘を罰しており、そのことで僕が罰されているような行き場のない絶望感です。

このエントリは誰かを呪うために書いたわけではなく、海外に出るというのはやはりそれ相応の覚悟と代償を伴うものだということを書き残しておきたかった。やはりうまくいくばかりではない。我が家は、本当に素敵な友人に恵まれ、会社の上司の心遣いに恵まれ、なんとかこれ以上の悪化がないように努めています。TKは所詮義務教育ではないので、心を病むぐらいならば日本語学校なりホームチューターなりを選ぼうと思います。

このエントリを読んで、やっぱり日本人が多い街に住んだほうがいいだとか、最初は日本語学校に入れようとか、そのいずれが言いたいわけでもないです。だってこれは100%人によるのだから。だからこそ、それは事前にシミュレーションゲームのように完全に対策可能なものでもなければ後から簡単に修正可能なものではない、現実はかくも度し難いものなのだということだということぐらいが教訓だと思います。

胸くそ悪いものを読ませてすみませんでした。僕はこの世で一番美しい娘を抱きしめて眠ります。

*1:保育園の年中に相当する年次だが小学校に通えるプログラム。Pre-Kとも。

年末のご挨拶と近況、あるいは機械学習のはじめ方

あ、退職エントリとかではないです。雑多な駄文をお許しください。

2018年を振り返る

3月にカリフォルニア州パロアルトのラボに異動になって早くも3/4年が経ちました。 自分としてはまだ1年経ってないのかという感じです。もっと長く居るような気もするが、来たばかりのような感じもある。 生活には完全に慣れました。結局の所、生きていくだけなら "You need a bag?" に "No" だけ言えれば何とかなります。

家族のこと、子供のこと

家族が適応に苦しんでいます。特に子供は、8月からTKという公立小学校の下部組織に通っていますが、予想を遥かに超えて心を閉ざしたままです。 娘はとてもシャイで、思ったことが口にできません。非常に端的に言うと、生きる力が強くありません。象徴的なできごとが幾つかありました。

ある日、先生が陪審員の義務で代わりの先生が来た日、普段とは違う教室に預けられた。 お昼になってみんなは弁当を取りに行ったが娘は「誰も教えてくれなかったから」部屋に残り、そのまま食事も摂らずに途方に暮れて過ごした。

またある日はバッグにフォークが入ってなかった。実際には底の方に入っていて気付かなかった。 娘は「手で食べるのはお姉さんじゃないから」そのまま諦めてお弁当を食べなかった。

自分だけ食事をとっていけないはずがない。隣の部屋に歩いていけばよいのだ。 フォークがなければ手で食べればよいのだ。どのみちおにぎりとタコさんウインナーとかしか入っていない。 食器がなければ "fork!" と言えばいい。"Help me!" でもいい。言葉なぞ重要ではないのだ。毎日毎晩教えた。それでもできない。

それでも娘の不安と孤独と理不尽を思うと怒る気にはなれません。こんな目に遭わせてすまなかったねと抱き合って泣くしかできません。 向いてない、向いてなかったんだ。この地には勝者しかいない。敗者は去ったのだ。我々は路傍の石にすぎない。

どうすべきか結論は出ておりませんが、会社が親身に相談に乗ってくれているのでもうちょっと色々考えてみようと思います。ありがたいことです。

仕事

僕のこの地でのミッションは、会社に新たな収益源の萌芽をもたらすことです。 サービスの詳細をまだ公開できないのが心苦しいのですが、前期はプロトタイプとして小さなウェブサービスをひと月ぐらいでひとりで開発しました。方法論だけ以下のエントリにまとめてあります。

fushiroyama.hatenablog.com

会社はこれを非常に高く評価してくれて、ボーナスをいっぱいくれました。本当に良い会社です。ありがたいことです。

その後一瞬モチベーションを失いかけたのですが、後述する機械学習のプロジェクトが始まってまたモリモリとやる気が戻ってきました。 いまは死ぬ前の山のフドウのような清らかな笑顔で仕事場に向かっております。

機械学習

実はこのエントリで一番書きたかったのがこれです。これも以前別エントリで書きましたが、僕はこの言い方は好きではないのだが、まあいわゆる文系出身でして、数学はIAIIBまでしかやっていません。それも大部分は忘却の彼方に置いてきました。その状態からとりあえず機械学習のプロジェクトを始めるまでの準備をここに残そうと思います。

以下、自分が現状認識している機械学習について持論を述べておりますが、これは大いに誤っている可能性がありますから、容赦なくご指摘ください。来春までのプロジェクトの糧にしたいです。

fushiroyama.hatenablog.com

まず、機械学習の目的なのですが、これが個人的にとても重要だと思っています。我々のプロジェクトの場合、機械学習を利用する目的は「よりユーザのコンテキストを理解した提案をするため」です。

昨今世間で言われる "AI" の大部分は、機械学習の「学習済みモデル」を指していると認識しております。 これは関数のようなもので、ある入力に対して直ちに結果を出力します。プログラミングアルゴリズムとの違いは、これが単純なif-elseによる分岐ではなく、膨大なデータを使った学習の結果できあがったある種のブラックボックスであるという点です。 この関数の出力が、人間が目で見て頭で考えて行うそれよりも高精度であることが機械学習を使う究極の目的のひとつです。

機械学習が得意なことは限られています。すなわち、

  1. 連続的な変化から次の結果を予測する。これが「回帰 (Regression)」
  2. いくつかある候補の中から、入力したものがどれに類するか判定する。これが「分類 (Classification)」
  3. 雑多なデータの集まりから(時には人間にもわからない)性質の類似を見つけ出し、自律的にまとまりをくくりだす。これが「クラスタリング (Clustering)」

これらが考えられます。

1と2は実際のデータと正解データを与えながら学習させ、最終的には未知なるデータを渡した時に正解を予測してもらうという使い方をします。これは教師あり学習と呼ばれます。 対して3は、人間にも正解が分からないがデータを繰り返し与えることで特徴の似通っている部分をもとに群を形成してもらい、未知なるあるデータがどの群に類するかを出力してもらって同じ群の商品をユーザにオススメするなどの使い方をします。これは教師なし学習と呼ばれます。

僕の会社は世界最大規模のニュースメディアカンパニーであり、最大の強みは膨大な量のニュース記事そのものです。 したがって僕らがやりたいことは、ユーザが読みたいであろう記事をいかにユーザにシームレスに提供するかというところに帰着します。 必然的に、3の応用系が僕のミッションとなりそうです。

機械学習の数学

ここからが本題なんですが、僕は機械学習のプロジェクトを始める前に理論寄りの勉強をしました。 これには理由がありまして、自分の頭で考えて試行錯誤するための自力が欲しかったからです。

もしやりたいことが「カリフォルニアに棲む全野鳥の詳細な画像認識」のようにハッキリと決まっており、そのための教師データ(野鳥の画像)もある場合は、理論などすっ飛ばしてとにかく機械学習のライブラリなりフレームワークなりの使い方のみ覚えた方が求める結果に早くたどり着けると思います。

で、理論を学ぶ場合はどうしても高校程度の数学を避けて通ることができません。 ただそれほど極端に恐れる必要はなく、ざっくりと「行列の内積」と「微分」がわかれば良さそうです。 ここでは自分が基礎知識を身につけるために使った教材を紹介したいです。

ゼロから作るDeep Learning

この本はマジで素晴らしいです。Deep Learning機械学習の手法のひとつで、敢えて誤解を恐れずに言うならば、教師データから最適な重みパラメータ(後述)を自動獲得することを目指した学習手法です。

この本の特徴は、特定の機械学習のライブラリやフレームワークの使い方の解説に主眼を置いておらず、NumPyという行列の計算を便利に行うためのライブラリとPyplotというグラフ描画用ライブラリを用いる以外はもっぱら愚直に機械学習で利用する関数を理論に基づいて実装していくというスタイルをとっていることです。

はじめはパーセプトロンという、複数の信号を受け取ってひとつの信号を出力する回路を実装します。 信号(たとえば電流を想像してください)は、重みと呼ばれる信号を増幅/減退させるための係数を掛けて、それが閾値を超えると1、それ以外は0を出力するというような極めてシンプルなものです。 これを使って、プログラマなら誰でも理解できるANDゲートやORゲート(論理回路)を実装します。 次に、シンプルな論理回路を組み合わせてXORゲートのような非線形回路を実装し、ニューラルネットにつなげます。

それからニューラルネットワークという、パーセプトロンの発展形を実装していきます。ニューラルネットワークでは信号の出力部分を司る関数(活性化関数といいます)にシグモイド関数などのなめらかな変化を表現する関数を用い、単純な01の信号から連続的な実数の変化を出力できるようになります。 ディープラーニングとはこのニューラルネットワークを多層に重ねて学習をさせることで精度を上げる手法です。

ここで必要となる数学の知識は、たかだか指数関数の値の変化だとかその総和であるとか総和に対する割合であるとか、いずれも四則演算であって何ら恐れる必要がありません。行列の内積も、結局の所データをベクトルとして表現して各ニューロンを通る際に次元を合わせなければならないという程度に過ぎず、かしこまって高校の教科書を取り出さなくても次のウェブサイトを参照するぐらいで十分です。

atarimae.biz

この本ではその後も、新しく出てくる知識はとくに外部情報に頼ることなく解説を読みながら進められる程度の難易度でずっと進んで行きます。 損失関数という、ニューラルネットワークが手掛かりにしながら適切なパラメータを探るための関数を自分で実装しながら二乗和誤差を使った最小二乗法(最近話題になりましたね)などを学びます。

さて、この辺りで微分が出てきます。 機械学習では学習の際に最適なパラメータを探索していくんですが、このときに各データがどういう風に変化していくかをその瞬間の変化量を元に求めます。 これこそが微分であり、それ以上でもそれ以下でもありません。

僕はどれだけ思い出しても高校時代にまともに微分をやった記憶がなく、正直イチからの勉強になりましたが、これについてもこの本の解説がとても丁寧なので特に難なく読み進められると思います。たとえば、次は本書で紹介される数値微分Pythonでの実装例ですが、

def numerical_diff(f, x):
    h = 1e-4  # 0.0001
    return (f(x + h) - f(x - h)) / 2 * h

これって、第一引数に関数を、第二引数に何か変数を取ってすごーーーーーく小さい値を加えつつ実行したときの差分を、その小さな値で割った(つまりその小さい値の範囲内での変化量。ただの比)だけですよね。プログラマだからこそ、教科書にある lim -> 0 みたいなのより分かりやすいと思うんです。

指数関数の微分公式とかも突然当たり前の知識として出てくるんですが、これも次のリンク等を見ておけば十分です。

atarimae.biz

あとは、勾配法、微分を効率的に行う誤差伝播法、畳み込みニューラルネットワークと発展していきます。 この本では主にMNISTという手描き数字のデータセットを使った画像認識を扱っていますが、続刊では自然言語処理も扱っているようです。 とにかく、最初に読む一冊として強くおすすめします。

ゼロから作るDeep Learning ? ―自然言語処理編

ゼロから作るDeep Learning ? ―自然言語処理編

「超」入門 微分積分

先述のとおり、個人的には「ゼロから作るDeep Learning」を手を動かしながら読んでいけば、機械学習をやるための数学を別途やる必要はそれほどないように思っていますが、夜に補完的に読んでいる本を紹介します。

「超」入門 微分積分 (ブルーバックス)

「超」入門 微分積分 (ブルーバックス)

これは中々面白い本で、微分積分を小中学校で学ぶような図形の面積の求め方といったイメージしやすいアプローチで解説してくれる本です。

特徴的なのは、まずは積分から解説している点です。筆者の主張によると、積分法の方がずっと古代から成立したものであり、それが身近なものの面積や体積の近似を簡単に求めるための実用的な用途であり、図形から視覚的に理解しやすいだろうという考えのようです。 実際に三角形や長方形を使って半球やトーラス体などの面積や体積を求めますが、小中学校の知識から極限に関する洞察などをわかりやすく与えてくれます。

後半では期待する微分の解説ですが、これも可能な範囲で極力二次元三次元図形を使った視覚的にイメージしやすい方法で変化量を解説してあり、微分の各種公式がどうしてそういう形なのかも暗記ではなく理解から導出できるような作りになっています。 これを読む前と後で機械学習の勉強に対する貢献があったか否かはちょっと判断がむずかしいですが、増減表とかは僕は知らなかったので今後高校数学をやる上ではとても良かったです。それに、何よりの貢献はやはり微分に対する恐怖が減ったことかな。

やさしく学ぶ 機械学習を理解するための数学のきほん

それから、これは紹介するかちょっと迷ったんですが一応読んだので紹介しておきます。 機械学習で使われる用語や理論を分かりやすく解説してあるという点で、前出の「ゼロから作るDeep Learning」に小さい重みを、「超入門 微分積分」に大きい重みを掛けてシグモイド関数に通したような本ですが、女の子二人の会話形式で進んでいく体裁が好みの分かれるところです。ハマる人にはハマると思うので書店で見かけたら試し読みしてみてください。

今後

このエントリで書いた内容はあくまで機械学習プロジェクトの準備体操であって、恐らく現実世界の課題を解決するために想像を超える艱難辛苦が待ち受けていることは想像に難くありません。年明けからは外部の協力会社さんにエキスパートアドバイザーとして入ってもらいながら、いまやってるプロジェクトの最適なレコメンデーションエンジンを実装予定です。

重ね重ね、会社にはこのAIの時代に自分に1Qを投資して機械学習のプロジェクトをやらせてもらえることを感謝します。 よい結果を出すことが会社への最大の恩返しだと思うので、気合を入れて頑張ろうと思います。

それでは少し早いですが、よいお年を。白山、タイキック。