とある京大生の作業ログと日々の雑記

コンピュータサイエンスについて学んだことを可視化したり日々の雑記をまとめてます。

スイス留学終了

こんにちは、コミさん(@komi_edtr_1230 )です。




今この記事を書いてるのがスイス時間で12月11日の22時で、掲題の通りスイス留学もあと1日なんですよね。




2日後のお昼には成田空港にいるわけです。




まあ実を言うと授業自体は21日くらいまであるんですけど、ぼくはもうすでに京大の卒業単位はほぼ揃ってて残りは卒研だけで、こっちでの単位とかいらないので別にいくら授業でFることになっても構わず帰国します....w




帰国の航空券を取ったのが10月の頭だったんですけど、なんでこの中途半端な時期に取ったのかちょっと自分でもあんまりよくわかってないんですけどね(笑)




ふと思い返してみれば10月あたりは日本に帰りたい感が結構あったような気がしてて、多分その勢いで航空券を取ったんだと思います(推測)




ただまぁ今までずっと勉強してきて、いい感じに勉強したかったことはひと通り触れることができたのでキリがいいタイミングだなと思ってます。




さて、とりあえず今回の留学終了エントリーを書くにあたってスイスでの生活身についたことこれからのことあたりについてザザッと書いていこうと思います。



スイスでの生活






ぼくのツイッターを追ってた人は知ってると思うんですけど、ずっと図書館にこもってたのでぶっちゃけスイスでの生活はあんまり楽しんでませんw




ただ、今回留学しててなんやかんやでスイスが好きだなぁという思いはあります。




留学の中で気づいたスイスの良さとして「治安がいい」「公共交通機関が日本くらいしっかりしてる」「街がきれい」あたりが挙げられるかなぁ、と。




ホントに静かな街で、都市部の方もあんまりゴチャゴチャしてる感じがないのでぼくはこういう風景が好きですね。




あと、自然も豊かで空気がきれいです。




だから将来社会人になってヨーロッパに出向することになったらスイスがいいなぁと思ったりしてます。




てか大学院以降でもスイスは割とアリかなぁって思ったり....




あ、あと個人的にものすごく助かったなぁというのは英語が通じるということですね。




そこらへんの街中を歩いてるおじさんとかおばさんでも英語はある程度通じるし、前に髪切りに行った美容院のお兄さんも英語は堪能でした。




ぼくの住んでたローザンヌ公用語はフランス語なんですけど割とみんな英語が喋れて、これは日本じゃありえないですよね.....




だからスイスは訪れやすい国なんだなぁって思います。(逆に日本を旅行しにくる外国人めっちゃ苦労してそうだから京都帰ったら積極的に声かけて手伝ってあげたい)




実は先週末にスペインのバルセロナ旅行してきたんですけど、地下鉄とか各所がめっちゃ治安悪そうな感じがあって、旅行自体は楽しかったんですけど直感的に「俺はここには住みたくないな...」って思っちゃいました.....w




ウクライナに旅行してきたときも同様で、やっぱりスイスの安心感ハンパないな〜って思ってます(笑)




結局スイスの生活はそこまで楽しめてないけど、スイスの広大な土地と牧歌的な空気が居心地いいなって思ったり。




だから今回の留学ではじっくり勉強に打ち込めたってのはあるかもしれません。




さて、スイスの悪いポイントとしてはよく物価の高さが言及されるんですけど、個人的にはあんまり気になりませんでした。




まあぼくは奨学金で毎月16万円もらってたというのもあるんですけど、それ以上にパスタが安かったり(1キロで100円くらい)パンも安くて、小麦系の食材はいくらでも安く手に入るのでここらへんを主食にしてしまえば全然物価の高さは気になりませんでしたね。




一ヶ月の出費として、 ・寮費:6万円 ・食費:3万円 ・その他雑費:2万円 って感じだったので、生活費は京都にいるときとそこまで変わらなかったかもしれません。




スイスにいると日本食が食べられないってのは言われるんですけど、普通にアジアショップ的なとこに行けばみりんとか料理酒は手に入るし、スーパーでも醤油とか手に入るので日本食はいつでも錬成可能です(ぼくは前に照り焼きチキンを作りました)




というような感じで、「ラーメンが食べられない」「湯船に浸かれない」など日本特有の要素を除けばスイスでの生活は日本よりも良かったような感じもします。




ぜひとも今まだ1回生以下の人はスイス留学を視野に入れてみてください!

身についたこと






今回の留学で身についたこととしてはコンピュータサイエンス(CS)の知識語学力度胸コミュニケーション能力あたりだと思います。




CSの知識について、まあ今までブログで色々書評を書いてたようにめちゃくちゃ勉強しました(笑)




もう毎日1日13時間以上やってて、多分今回の留学で勉強へは受験生以上にストイックに取り組んだと思います。




今回の留学で読み切った本として
タネンバームのコンピュータネットワーク
Computer Vision: Algorithms and Applications
GoodfellowのDeep Learning
Introduction to Algorithms
K&R
カステラ本
Linux Kernel Development
Low Level Programming
パタヘネ
Practical Common Lisp
Practical Malware Analysis
PRML
Reverse Engineering for beginners
ドワンゴのScala解説資料
Security Engineering
SICP
ALife
って感じです。。。




ちょっと自分で書いてて思ったけどめちゃくちゃ多いな(笑)




トータル17冊で15000ページ以上あるんじゃないですかね?




まあ毎日13時間以上勉強するのを4ヶ月も続けたらこうなるって感じですw




自分自身は非情報系の学部の人間でこれから大学院以降でCSに取り組みたいって考えてる人間で、情報系を専攻してないことにものすごくコンプレックスがあったんですよね。




だから今回の留学は学歴コンプならぬ専攻コンプを解消するためという側面があります(笑)




一応これらに挙げたもの以外にも、授業では暗号学などにも取り組みました。(代数学ってめんどいんだなって思った)




ちゃんと手も動かしてて、SICPを読んだ際にはLispコンパイラLispインタプリタを作りましたし、PRMLを読み進めながらK-meansやロジスティック回帰、ガウス過程などをスクラッチで実装したりもしました。




だから今回の留学では自分でも本当によく頑張ったなぁって思ってます(笑)




まあそんなこと言いながら今までの同じテンションでOn Lispを読み進めてるんですけど...w




とりあえず勉強がんばりましたって話ですね。




語学力について、まあほとんど図書館にこもってて人とコミュニケーションを取らない生活ばっかだったんですけど、たまに会うオーストラリア人のオタクと中国人のオタクとよくアニメの話をしてたので多少は会話への慣れもできたと思います。




膨大な量の英語の本を読んで、たまにオタクたちとアニメの話を英語でして、普段から洋楽を聴き、メール出しなどを英語で行なっていたので、なんやかんやで英語の4技能の訓練になっていたという事実(笑)




語学力も結構コンプレックスがあって、受験生の頃はセンター英語のリスニングが24/50って感じで、もともとかなり英語が苦手だったんですよね。




1回生のころのドイツ語の単位も落としたし....w




そんなぼくが今回留学きて思ったのは、英語力も所詮はただの慣れだという話です。




もちろん高等な文書を読もうと思ったら語彙力とかも必要ですけど、ぼくら理系にとって英語はただのコミュニケーションツールなので英語に固執する必要はなく、つまりただの慣れが必要だったというわけですね。




一応京大生ということで最低限の英語の語彙力は揃ってたわけで。




日本にいると日本語ばかりの生活になってしまって英語を浴びる環境には身を置きづらいのは事実ですけど、なんだかんだで度胸と慣れで英語は喋れるとわかったのは一つ大きな事実ですね。




もちろん、これで満足してはいけないのでこれからも英語の能力は高めていく必要があるわけですけど(笑)




度胸、コミュニケーション能力について、やっぱり留学に来て周りに助けてくれる人や頼れる人がいなくなるので自分でどうにかしなきゃいけないんですよね。




なのでもう全力でアクティブに行動して、自分で全部調べて、窓口で交渉したりとか。




ぼくは日本人で、今回スイスでの諸々の手続きとかをやっててやっぱり日本人は日本が住みやすいんだなぁって思いました(当たり前だけど)




今回の留学ではそこまでヤバいトラブルを抱えることはなかったんですけど、SIMカードの契約とか寮の契約、保険の手続きなど全部自分でやったので、ある程度は図太くなったような気がします。




とにかく、今回の留学ではめちゃくちゃ成長したと思います。




あ、あと今回留学してて夕飯めんどいから明日でいいやって感じの生活をしてたらかなり痩せました(笑)



これからのこと






14日に帰国するわけですが、ぼくは16日以降で怒涛の忙しい日々が始まります。




産総研にてゼミに参加したり、憧れのGoogleへ訪問したり、京都に行って卒研や留学についての相談をしに行ったり、まあめちゃくちゃイベントが入ってます(笑)




多分どっかで倒れそう....




そんなこんなで帰国後はかなりやることがあるので、まあ息をつくのはクリスマス前後くらいだと思います。




余談ですがぼくは彼女がいないのでクリスマスは実家で家族とクリスマスケーキを食べます(笑)




まあ直近の話はこんな感じですね。




進路とかの話について、まずインターンなんですけど、結局海外インターンは別にいいかなって思い始めました。




今回もらってる奨学金のアレで海外インターンをしなきゃいけないんですけど、まあなんやかんやで無事に辞退できそうな感じがあるので無理にインターンをする必要はないなって思い始めたのが大きな理由です。




てか今もらってる奨学金(トビタテ)はあんまり自由な行動を許さないので、学部3回生という色々ターニングポイントとなるタイミングでこの制約は結構きついなってのが正直なとこですね。




実際、最初は留年前提で留学計画を立ててたんですけど、ぼく自身も今回留学してる中で色々将来のことを考えたりしてて、やっぱり早めに留学を切り上げて早く大学院行って研究したいなって思ったっていうのがあります。




まあただもしGoogle Tokyoへ訪問した際にインターンのお話があるようだったらめちゃくちゃ嬉しいんですけどね(笑)




せっかく留学で勉強しまくったので最高のアウトプットの場になるかなって思ってます。




まあインターンの話は置いといて、大学院について。




結局まだ決まりません(笑)




というのも、京大の情報学研究科に一瞬決めかけたんですけど経済的な問題からやっぱ実家から通える大学院がいいなって思って、今は東大の院とかそこらへんを視野に入れてます。




そんなこんなで、インターン問題はやや解決で、大学院どうするか問題は未だに健在です。




とりあえずここらへんの問題は日本に帰った時にいろんな人と話してしっかり決めようと思います。



まとめ






ぼくの大学生活4年間のうちで一大イベントであっただろうスイス留学もこれにて終了です。




今回の留学でたくさん得たものがありましたし、同時に自分の至らぬ部分についてもある程度具体的な形で把握することができました。




ホントはもっとじっくり考えたいしやるべきこともたくさんあるんですけど、まあ留学の終わり方としてこれが一番ベストなのかもれません。




留学とは一体どうあるべきか?




ぼくはこれについて留学中にずっと考えてました。




勉強に打ち込むか、外国人の友達をたくさん作るか、旅の思い出を写真に残すか。




想定されうる解はたくさんあるんですけど、今回留学を終えるぼくの答えとして今後に活きるものであるべきというものです。




勉強だとか友達の数だとか、そういう具体的な形にとらわれず、費やした時間とお金がちゃんと今後に活かされることが留学というもののあるべき形なんだと思います。




そういう意味で、ぼくは今回の留学がどうだったのかというのは今後の身の振り方で決まるんだと思います。




つまり時刻tの価値は時刻t-1と時刻t+1によって決まるわけですね(?)




とにかく、今回の留学の真価が問われるのは今後次第です。




ただ、今のぼくに言えることは




スイスに留学してよかった、めちゃくちゃ楽しかった




ということのみです(笑)




ではでは、長々とぼくのポエムを読んでいただきありがとうございました(笑)




てことで、今後もがんばりますので応援しててください!

パタヘネを読んだ感想と近況報告

こんにちは、コミさん(@komi_edtr_1230 )です。




今回はコンピュータアーキテクチャの本で超有名な本であるパタヘネを読んだので、それの書評です。



きっかけ






パタヘネという本は正式名称はComputer Organization and Design(邦題はコンピュータの構成と設計)なんですけど、著者がパターソ先生とヘネシー先生という2人組で書かれている本で、それらの略称としてパタヘネという愛称で親しまれています。




ということで有名な本というのは日本にいた頃から知ってて、なので「いつかは読もう....」とは思ってたものの他の読みたい本を優先してたらスイス留学がもうすぐ終わるという段階にまで来てしまいまして....




留学中には有名どころは全部読んでおきたい気持ちがあったので、そんなこんなで今回パタヘネ爆速で読み進めました(本当にこういう取り組み方よくない)




費やした時間だと12時間×3日くらいなんですけど、途中のプロセッサとか論理回路のところで興味がなくなってしまって第4章は途中でやめちゃったんですよね....




あと演習問題も解くのは諦めて、文中にある例題だけささっと眺めてという感じです。




.....実は全然読んでないのでは?




とりあえず書評に行きましょう。



感想






ぶっちゃけ、読んでてしんどかったですw




アーキテクチャ自体は前にオライリージャパンから出てる「コンピュータシステムの理論と実装」という本で勉強したことがあったので論理回路やALU、メモリマッピング仮想マシンの知識はあったので一応理解はしてたつもりだったんですけど、このパタヘネはそれら一つ一つをかなり掘り下げたようなイメージでした。




ただ、ちょっとぼく自身があまりアーキテクチャに強い関心があったわけじゃないので、なんというか読み進めててなるほどなぁ....ってなる程度で、あんまりしっくりこなかったような気がします.....w




まあそんな中でも今回読んでPipelining(日本語わからない)とか並列化の知識はめちゃくちゃついたと思います。




各部分における設計の工夫とかパフォーマンスの改善、並列化の理論などがぎっしり解説してあったので、読んでてものすごくわかりやすいなぁと感じました。



アーキテクチャをあっさり勉強するなら他の本?






一応今回パタヘネを読みきったわけなんですけど(読めたとは言ってない)、ぼくみたいなアーキテクチャにめっちゃ興味ある人じゃないと読み進めるのってかなりしんどいような気がしたんですよね。




ぼくとしてはアーキテクチャへの向き合い方としてはコンピュータがどういう風に動作してるのかということが分かればいいなくらいな気持ちだったので、そういうあっさりした具合で良ければオライリージャパンから出てる「コンピュータシステムの理論と実装」の方がいいと思います。




とにかく個人的な感想としては、パタヘネは電気系の学科みたいなハード側の人が読めばよくて、ぼくらみたいなソフト側の人はパタヘネをしっかり読み込む必要はないのかなぁ、と。




まあここらへんに関してはかなり人によって意見はあると思いますし、ぼく自身もアーキテクチャの知識がかなり強いというわけではないのであくまで個人的な意見です。




ということでパタヘネの書評エントリーだけどぼくはここでオライリージャパンコンピュータシステムの理論と実装を推しておきます(笑)




では書評はここらへんにしておきます。



近況報告






この記事を書いてるのが11月29日の夜で、スイス留学も残り2週間となりました。




2週間後のこの時間にはおそらくロシアのモスクワでトランジットの飛行機待ちをしていると思います。




気がつけばもうスイスに来てから3ヶ月半が経ち、随分とスイスの土地に馴染んできたと思ったら留学も終了なんですよね。




最初来たときは8月の中旬で、スイスは北海道より緯度が上だから寒いだろうって思ってたのに来てみたらめちゃくちゃ暑くてスイスクソ暑いやんけ!!!って思いながら半袖に短パンで過ごしてました。




でも今は最高気温が5度だったりでスイスの街にも雪がチラチラ降るようになったりして、気がついたら冬に。




早かったなぁ....




ま、実際のところ勉強してばっかりで特に何か特徴的な思い出があったりというわけではないんですけどねw




ただ今回のスイス留学の関しての思い出を強いて挙げるとするならば、やっぱりこの毎日13時間以上死ぬほど勉強したという事実がこのスイス留学での一つの思い出なのかなぁ、と。




旅行やイベントに参加したみたいな単発的な思い出もあるし、いろんな国の友達ができたみたいな浮遊感のある思い出もあるんですけど、ぼくにとって大切なのはそういうのじゃなくて、この勉強に取り組んだ日々というのがやはり自分にとって1番価値があったような気がします。




先日ツイッターを見てたら落合陽一氏がこんなことを言ってました。









流石にこの3ヶ月で1400時間(≒15時間×90日)というのは無理でしたけど、それでも図書館で一心不乱に教科書を読みまくってコードを書いたという事実が今のぼくに自信を与えているような気がするんですよね。




まあ結局は自己満足なんですが....w




とりあえず毎日平均して13時間くらいはなんらかの勉強をしてたと思います。




なんていうんでしょうかね、例えるなら今回のスイスで勉強した日々は高校のとき部活に打ち込んでたというのに近いような感じがするんですよね。




高校の部活って、ぼくは高校の時はアメフト部に入ってたんですけど、別に将来はプロのアメフト選手になるわけでもないし将来はアメフトの仕事をするわけでもないし、だからぶっちゃけ一見すると無駄じゃないですか。




むしろ部活で遠征費用とかでお金は飛ぶしケガはするし、物質的な観点で見たらむしろマイナスみたいなとこもありますよね。




でも、当時は死ぬ気で毎日を過ごしてて試合でも活躍しようとしてたし全力で体も鍛えてたし、あのとき必死になった日々というのは今の自分へ自信を裏付けるものになってると思ったりもするのです。




とまあそんな感じで、今回のスイス留学も死ぬほど勉強したという事実が自分はやればここまで勉強に打ち込めるんだぞと思って自己肯定感につながるわけですね。




ま、先ほども言った通り、こういう自信とか云々はただの自己満足なんですけど(笑)




ただ、実利的な観点の話をすると、今回の勉強しまくったおかげでコンピュータサイエンスの素養を涵養できたと思います。




ぼくの京大での所属は理学部生物系で、まあ情報系とはあまり縁のない学部なんですよね(バイオインフォマティクスがーとか言う人は静かにしててください)




理学部で開講してる情報系の授業なんてせいぜい微分方程式をプログラムに起こす程度のことで、本当のコンピュータサイエンスとは全然遠いわけです。




ぼくは将来は情報系でガンガンやってきたい人で、それを気づいたのが大学に入った後だったので今回じっくりコンピュータサイエンスを勉強することができて本当に満足しています。




それと同時に今回たくさん勉強してやっぱりまだこれから情報系に携わっていきたいなって思ったし、「まだまだ勉強するべきことがある」と自分の至らぬ部分を定量的に把握できました。




先日に理学部の友達でぼくが最も尊敬している人と電話してて、その人も前まで留学してた人で、ちょうどこんな話をしてました。




これからの目標が一つ具体化できたような気がします。




とまあこんな感じでスイス留学は割と満足度が高いんですけど、不満を挙げるとするならば人間関係とかですね。




もともと日本にいた頃も知り合いは多いけど友達はそこまで多くなかった人間なので友達の少なさは別にって感じなんですけど、スイスに来てる人で自分に刺激を与えてくれる人がいなかったのはちょっと残念みたいなとこはあります。




まあスイスで会った人で面白い人がいなくてもツイッター開けば自分より強い人がわんさかいるんでそこに関しては気にはしてないですけどw




少し話が変わるんですけど、今回留学して良かった点として日本の良さにちょっと気づいたという点があります。




日本にいた頃はツイッターを開けば日本のダメなとこがわんさか出てきて、なのでもう日本なんかもう捨ててやる!くらいの気持ちだったんですよね(笑)




今も相変わらず日本の行政とかひどいし文科省とか色々文句はあるんですけど、それでも今回スイスに来て自分は日本人で、やっぱり日本という土地が住みやすいんだと思いました。




ぼく自身は今までバックパッカーの経験もあるし割と海外への適応能力はある方だと思ってて、だから別にこのままスイスでも住めるな〜って思ってはいるんですけど、やっぱり母国が居心地いいんです(笑)




ここらへんの感覚に関してはうまく言語化できなくてなんとも言えないんですけど、とにかく留学前は将来は日本から出ていってやる!くらいの感覚だったのが別に将来はまあ日本でも構わないかな...?くらいになりました。




ただまあもう一度言いますが、今も相変わらず日本の行政とかひどいし文科省とか色々文句はありますw




だけど今回留学を通しての心境の変化として今のこうした日本の状況を忌避しようとしてたのが解決へコミットしてもいいかなと思い始めました。




思考停止で反日感情を抱くという行為に対して疑問を強く持ち始めた、という言い方が正確かも?




うーん、うまく伝えられない。




まあこのネタはどれだけ時間が経ってもうまくまとめられる気がしないのでここらへんにしておきます(笑)




とまあ色々述べましたが、とにかく今回の留学で色々自分の中で成長した部分や変わり始めた部分があるというお話です。




留学の話でいうともっとたくさん考えたことや感じたことがあるんですけど、あんまり喋ってると量が膨大になっちゃうので今回に関してはこれで終わりにします。




てかスイス留学終わったような感じですけどまだ残り2週間あるので(笑)




2週間後に全部片付いたときにもう一度まとめ直します。




またまとまりのない文章を生成してしまったんですけどお許しください(笑)




よし、残りあと2週間がんばります!




では!

コンピュータビジョンの勉強をしました

こんにちは、コミさん(@komi_edtr_1230 )です。




ま、そんなことは置いといて、さっさと本題に入りましょう。




今回はコンピュータビジョンの書評です。



きっかけ






正直なところCVは勉強する予定になかったんですよね。




予定がなかったというか、完全に存在を忘れてたという表現の方が正確かも?




前回GoodfellowのDeep Learningの書評が終わったあたりで、ふとカメラとかの顔認識システムってどうなってるんだろうって思ったんです。




2012年くらいからカメラの機能としてあるけど、そのころはまだディープがバズワードになる前だったんで、一応技術として顔認識のシステムはあるんだろうけど、そういや知らないな〜って。




そんなことを考えてたとき、そういやOpenCVって機械学習系だと便利ツールの代表格みたいなところあって、「もうこの際OpenCVの中身を知っとくべきだしCVの勉強やってみるか!」ってのが主な動機だったりします。




そんなこんなでGoogle先生に「computer vision pdf」って調べてみると良さげな本が見つかりまして、それで勉強開始しました。



全体の感想






ひと通り読んでの感想としては




CVの基礎を詰め込んだ歴史書




って感じでした。




というのも、この本が書かれたのって2010年で、まだディープラーニングなるものがバズる前だったんですよね。




なので主な研究紹介がだいたい90年代前半から00年前半がメインで、だから画像認識のアルゴリズム紹介とかだと「今だったらニューラルネット振り回した方が圧倒的にいい成績出てるんだよなぁ....」って思ったり。




まあ確かに泥臭いアルゴリズムはたくさんあるんですけど、昔の提案手法って基本的に単純なアーキテクチャばかりなので学ぶべきところは大いにあるなぁとも思いましたね。



良かったところ






とにかく数式での解説や具体的な図やグラフを用いた解説が豊富だったのは良かったと思います。




最近の機械学習本って数式を使わずに定性的な説明をしてコードを書いて「これで画像認識ができましたね!」みたいな本が多いじゃないですか。




個人的にはこういう解説方法は良くないと思ってて、やっぱり機械学習などの実装ってのは背景に数理モデルとかが存在して、それを具体的に数値実験できるってのが魅力だと思うんですよね。




あんまりこういう解説が主流になってしまうとインチキ機械学習erが増えてしまって...という気がするんです。




とまあそういう理由から、今回読んだ本は数式を使った解説があったのは良かったと思います。




ぼく自身としても今までマルコフランダム場についての理解が甘かったりってのを認識できたし(画像認識ではマルコフランダム場はめちゃくちゃよく使う)、これ以外にもアニーリングの知識もつきました。




あとセグメント処理でのWatershedセグメンテーションとかHough変換、グラフカットとか知らない概念がたくさん出てきたので、今回これらを知れたのは良かったと思います。




とにかく知らないアルゴリズムをたくさん知れたのはめちゃくちゃ勉強になったと思いました。




まあぼく自身今まで全く画像処理とかを勉強したことがなかったので......w




実際のところ通読しただけで実装に関してはかなりサボっちゃったんですけど、これでOpenCVの中身がある程度把握できたと思います。




そういう意味で、OpenCVが自分にとってブラックボックスだったのが氷解できたような気がして、これが今回CVを勉強して1番の収穫かな〜って思ったりしてます。

残念だったところ






基本的には数式の説明とかが多くて良かったんですけど、3Dレンダリングとかに関してはあんまり数式を使ったりということはなくて、テクスチャや反射率をどう処理してるのかっていう解説だったので、ちょっとここらへんに関しては勉強というより読書になってしまったかなぁという感じが....




まあ数式を使った説明とかは難しいかもですけど、どうも読んでて実装のイメージがつかなかったのでレンダリング系に関しては「んー....」という感じですね。




まあ実際のところ今後自分が3Dのデータを使って云々やるかと言われた恐らくなさそうだし、今はUnityとかBlenderとかの便利ツールが転がってるのであんまり細かいことは気にしなくていい時代なのかもしれないんですけど....




まあ何かしら困ったことがあればその都度追加で勉強すればいいんで、今回ひと通り勉強して「困ったときにその都度勉強する」ための下地ができあがったような感じがするので、まあ及第点といった感じですね。









まあこんなところでレビューは終わりにします。



近況報告






スイス滞在も残り2週間半となりました。




近況はというと、まあ相変わらず勉強ばっかりです。




11月中は用事があってジュネーブに一度行ったっきりで、それ以外はホントにずっと寮と図書館の往復運動をしてました....




うーん、人生に彩りがない。




スイス留学、これでいいんだろうか....?




まあこの留学ではやりたいことをとことん勉強するって決めてたので別にいいかという気持ちもあるんですけど、どうも周りの留学生がクラブに行って女の子引っかけまくってたりしてるのを見てるとなんとも言えない気持ちにもなったりします....(自分も女の子を引っかけたいという意味ではない)




というような感じなんですけど、勉強以外のネタとしては前にEPFLの教授から「大学院からEPFL来れば?」なんてお誘いをもらいました。




機械学習の授業を履修してて、この前に模擬テストがあったんですけど問題がめちゃくちゃ簡単で(線形回帰の正則化項のノルムいじったりとか)、速攻で仕上げて帰ろうとしたら教授に「お前早いな〜!」って呼び止められてそれで簡単に雑談してたんですよね。




そのときに日本では強化学習をやってたとか本を出版したとか云々の話をしたら、院からEPFL来ればいいじゃん!と。




まぁ悪くない話だけどお金かかるしな〜ってことを話したら「うちは留学生にはめっちゃ奨学金出すし、出版物とかあるんだったらスイス政府からも別途で奨学金もらえるだろうからむしろ余裕だろ!」とダメ押しされまして。




ちょっと今はインターンが決まらないとかで云々なってるのに、そこで大学院どうするの問題を持ってこられてぼくの頭はキャパオーバーです.....




ただまぁ大学院もじきに決めなきゃとは思ってて、ある程度は頭の片隅に置いとかなければなぁなんて思ったり。




実際今のところどこの大学院がいいかってのはあんまり決めてなくて、とりあえず国内だと京大の情報学研究科か東大の新領域、もしくはNAISTって感じなんですよね。




海外の院はそこまで考えてなくて、ただオーストラリア国立大とシンガポール国立大はちょっと視野に入れてたりという感じです。




てか日本と海外だと学部のカリキュラムも少し違うだろうし、正規で海外の院に行くなら修士よりも博士で行くのがいいような気がしてるんですけど、実際のところはどうなんだろう?




てか海外行くんだったら日本の院に籍を置いて研究留学で短期で来るのがベストじゃね?とも思ったり....




個人的に博士に行くか自体はまだ決めてないんですけど、博士行くんだったら待遇とか諸々の条件で絶対に日本ではやりたくないんで、博士留学はありだな〜って思ってます。




んーまあ大学院についてはまた今度考えよう。




話は変わりまして、インターンの方はというと全く進展なしです。




まず返事が来ないんですけど....w




恐らく各社の人事が時間かけてゆっくりレビューしてるんでしょう。




今まで3回インターン推薦が来たAmazonはというと、この前4回目のインターン推薦が来ました(?)




f:id:komi1230:20181125065514p:plain




一体Amazonインターンはどうなってるんだ.....




今まで推薦が来たのはイギリス、カナダ、アメリカの3つだったんですけど、この前確認したらイギリスはどうも選ばれなかったっぽいんですよね。(ステータスにNot Selectedって書いてあった)




ただ不合格通知は届いてなくて、代わりにAmazon USのところにSoftware Development Engineer, Recommendationsの手続き画面が。




てかこのレコメンデーションシステムの仕事は自分で申し込んでないし、てかもはやStudent Programじゃないし....




ただまぁレコメンデーションシステムは機械学習系(特に強化学習系)の仕事なんで、これを見る限りだとぼくのレジュメは評価されてちゃんとした部署に回されてる感がありますよね(気のせい?)




てかぼく基本的に大企業には「どっか引っかかれ〜」的な思いで複数の仕事のインターンに出すようにしてるんですけど、一部だけ不合格通知が届いて他は返事がまだ帰ってこないってのが割とあるんですよね。




例えばGoogleとかMicrosoftのリサーチインターンはすぐに帰ってきたんですけど、それ以外のソフトウェアエンジニア系はまだ帰ってこないんですよね。




これは期待していいんだろうか....?




なんとも言えないんですけど、ここらへんについては結果が出たら追ってまた報告します。




とまあスイス留学も終盤に差し掛かって気持ちよく留学が終わるかと思いきや、終了2週間前にして未解決問題ばかり立ちはだかるばかりで全然スッキリした気分ではないです....




うーん、がんばろう。

進路とインターンとトビタテと

こんにちは、コミさん(@komi_edtr_1230 )です。




今日はスイスは最低気温が0℃で夕方には雪が降りました。




めちゃくちゃ寒いです....




どんどん気温が下がっていくなぁなんて思ってる最近なんですけど、気がついたらスイス生活も残り1ヶ月を切っていてぼくの大学生活の一大イベントも一つの区切りがつくようです。




8月中旬にスイスに来てから今は11月の下旬で、時間が経つのも早いなぁと。




さて、本題に入りましょう。




ちなみに今回はいつもみたいに読んだ技術書のレビューじゃなくて、どちらというと日々の悩みの独白というかキャリア設計の悩みというかポエムというか...まあそんな感じの記事になります。




普段みたいな技術的な話はなくてただただぼくのキャリア設計の話を長々とするだけなので、とりあえずそこらへんを承知しておいてください。



トビタテという枠組み






多分この記事を読んでる人はぼくが今トビタテ!留学Japanというプロジェクトで奨学金をもらっていてそれでスイスにいるというのは知っていると思います。




なので説明は不要だと思うんですけど、今抱えている問題はこのトビタテが大きく関わっている部分があるのであえて説明しますね。




このトビタテというのは「日本から海外へ留学する人を増やす」というスローガンをもとにできた文科省が中心となっているプロジェクトで、企業が出資者となって日本の留学したい学生に奨学金をばらまく感じです。




で、留学したい学生が自由に留学プランを立ててプレゼンし、それに基づいて将来性のある留学計画を提示した学生を選定してお金を渡し、そうして留学を援助するわけです。




そういうわけで援助されている学生(=トビタテ生)は最初に提示した留学計画に基づいて留学を行います。




基本的にはこんな感じなんですけど、留学計画について文科省が提示している条件がいくつかあるんですよね。




条件としては留学が終わったあとは産業界に尽くせとか海外で日本の良さを広めてこいとか色々あるんですけど、その中でも肝となっている条件があり、それは何かというと「留学計画には実践活動が含まれている」というものです。




この実践活動は何かというと、留学にもいろんなタイプがあって、海外の提携大学との交換留学とか語学留学、海外インターンシップ、日本の文化紹介など色々あるわけですよね。




で、文科省曰く「交換留学や語学留学などはただの受け身な行為でしかなく何も発信がない」と。




なので実践活動という名の下、インターンや日本文化の紹介、ボランティアなどの何かしらの勉強以外の活動をして日本の存在感を海外にアピールしてこい、と。




まあ要約すればクールジャパンの鉄砲玉になれということですね。




この部分については批判したいところがたくさんあるんですけど、それをやってるとだいぶ本旨から逸れてしまうのでとりあえずトビタテはこういうものという説明に留めておきます。



提示した留学計画






とりあえずトビタテは上記のような感じで、ぼくもトビタテ生なので文科省に留学計画を提示してそれでお金をもらって今スイスにいるわけです。




ぼくの留学テーマはざっくりまとめると




AI技術を交換留学とインターンを通して学んで産学連携のアプローチで社会実装をする!




という感じです。




ここでAIという単語を使っているのは文科省の人にイメージを良くするためで、あえて機械学習という単語は避けました。




まあそれは置いといて、具体的な留学計画としては




1. 2018年9月から2019年7月までスイスのEPFLに交換留学


2. 2019年8月から2020年3月までアメリカでインターン




という構成となっていて、今はこの交換留学の段階にあります。



トビタテ生としてのやるべきこと






少し話が逸れるんですけど、トビタテには理系コースとか多様性人材コースなど枠がいくつかあり、ぼくはその中で理系コースの未来テクノロジー人材枠というやつです。




ぼくの未来テック枠はかなり希少で、トビタテの採択人数500人のうち理系コースが300人くらいで、未来テック枠はその理系コースの中の50人枠となっています。




実際のところ未来テック枠は応募段階で志望者が35人しかいなくて合格者は25人しかいなく、まあレアキャラなんですよね。




で、これらのコースという枠とは別の話で、留学計画が13ヶ月以上の人は全体の5%(=25人)までしかとらないという暗黙の規定があり、トビタテ事務の間では優秀枠と呼ばれている枠で(留学期間が長いとお金がかかるのでホントに優秀な人しか取らないことにしているらしい)、ぼくはその中の1人です。




つまり優秀枠かつ未来テック枠ということでトビタテの中だと超レアキャラなわけですね。




話を戻しましょう。




ぼくは留学計画では上記のような感じでトビタテに提示したんですけど、実際に今スイスにいて感じているのは交換留学はそんな長期でやる意味ないなってことです。




というのも、日本にいた頃から受験期はひたすら授業をあてにせず問題集を1人で解き進めていて、大学でもずっと独学でコンピュータサイエンス機械学習をやってて、学習スタイルが無師が基本だったわけです。




ぼくの勉強への姿勢はそのような感じだったので、実際のところCSの勉強をするためにCS系の学部へ交換留学に来ているにも関わらず結局自分で教科書を読み進めていて相変わらず独学なわけですね。




実際それである程度ちゃんと身についてる感じはするしCS系の学生と対等に議論できていてEPFLのテストの問題は全部解けるしで勉強方法については割と問題ないと思っています。




そんなこんなでスイスでも独学だったんですけど、ふともう無理にスイスにいる必要はないなって気がついたんですよね。




もうスイスでコツコツ勉強するのもいいけど、せっかくの機会だし海外インターンで現場に出てくるのはいい機会じゃないかって思ったんです。




これがだいたい10月上旬くらいの話ですね。




コレに気がついたぼくはスイスの交換留学期間を1セメスターで切り上げてインターン探しを始めました。




それに際して12月中旬に日本に帰国する航空券も用意し、1年契約だった大学の寮も来月で出ていく手続きをしました。




思いついたら即行動ってやつです。




実際この時点でトビタテに出した留学計画は崩れてるわけなんですけど、まあ期間の短縮とか留学内容の変更は1回までいけるので(審査はあるが)一応セーフくらいに思ってました。




さて、それでインターンを探し始めたわけなんですけどインターン確保できるのは小さなスタートアップばかりでいわゆるGoogleとかAmazonみたいな大企業はなかなか確保できないんですよね。




11月20日での現状はというと、AmazonとP&G、Snapchatが書類選考を通って面接待ちくらいでAppleGoogleMicrosoftなど有名企業にたくさん出したものの音沙汰なしです。




先ほど述べた通りトビタテ生の中でもレアキャラってこともあって、トビタテ側として有名企業でのインターンしてくることを期待されてて、今の率直な気持ちとしてはインターンを確保できない現状にめちゃくちゃ焦ってます。




まあトビタテ側にデカい口叩いた自分に責任があるんだけど.....




すでにトビタテ側には留学期間を短縮する予定であることは伝えてあるんですけど、留学計画の変更とか短縮には審査がある(しかもこれ数ヶ月単位のスケールでめっっっっちゃ時間かかる)からこちらとしてはなんとか早めにインターンを確保したいわけです。




先ほど述べた通り、この留学計画の変更は1回までという制約があって、今ここでスタートアップに留学行く旨で申請してしまうと後からもっといい企業にインターンが確定してもその計画変更が認められないので、まあ厳しいわけですね。




こんな感じで最近はトビタテ側の意向に反しないように、かつ同時にぼく自身が行きたい企業でインターンできるように勉強時間を削ってインターンの申請書類を用意してるわけです。




そんなこんなでここ2週間くらいは頭の片隅で焦りを感じながら勉強とインターン申請の書類作成を並行してやってました。



なんで留学してるのか、誰のための留学か






今日の夕方に勉強の休憩で、雪の降る中で寒いなぁって思いつつ外の屋根の下でタバコぼーっと吸ってたんですけど、ふと自分はなんのために留学してるんだろうって思ったんですよね。




トビタテの目を気にして勉強時間を削ってインターンの書類をせっせと仕上げて申請出して、という最近のこの日々って自分が思ってたものじゃないなって。




なんというか、ぼく自身の夢であって最高の機会になるはずだった留学が今やトビタテにコントロールされてる気がして。




この留学の主人公は留学してる自分自身なんだ、そんな当たり前の事実にふと気付きました。




そもそも行きたくもない企業にインターンに行くんだったら独学してた方が多分もっと建設的じゃないかなぁとも。




こんな冷静になれたのもタバコとスイスの寒さのおかげかもですね、、、




ということでとうとうこの振り切った思考にまで到達したぼくの中に




別にトビタテに制約されるくらいだったらトビタテ生は辞退しよう




というヤバいカードができました。




今回このヤバいカードを切ってしまうとトビタテ側からこれまでに支給した73万円(16万×4ヶ月+留学準備金25万)を返せと言われるかもですけど、まあ仕方ないかなぁとも思ってます。




まあこの現状を招いたのも自分がトビタテに過剰にアピールしてしまったという代償だなぁ、と。




ぼくが最初に留学を志した理由はこの留学が人生を変えるチャンスだと思ったからです。




CSの勉強も語学力も海外経験も、全てが今回留学に行くことで自分を変えるきっかけになるんじゃないかって思っていました。




非情報系の身でありながらずっと情報系のことを勉強してきたわけですが、気がついたらもう3回生の11月で、のんびり過ごせる学部生活も残りわずかというわけです。




この絶妙な状況下で自分が今こうして留学に来ているのは最高の運びなんですよね。




しかしこのタイミングで自分の不本意な形でインターンをするのはやっぱり違うと思うし、そういう意味でやっぱり自分自身を貫くことに意味があるんじゃないかって思っています。



現在手持ちのカード






そんなこんなで今は




1. どこか行きたい企業のインターン確保→トビタテに計画変更申請して留学続行


2. インターン確保できず→留学終了(奨学金返還?)


3. インターン確保できず→テキトーな企業でふらふらインターンする




というなんとも両極端な未来が待っています。




本当に来年以降どうなるのか全くわからないんですよね、、、




まあぼくが今やるべきことは勉強なので、とりあえずもう闇雲にインターン探すのはやめて勉強に専念しようと思います。




来年からの動き方も12月中旬くらいにならないとわからずってすごい嫌な気分になりますね。




あとはインターン申請出した各社から連絡待ち.....




てかAmazon書類選考通ったしこのままAmazon行けたら最高だなぁ......



これからの予定






ひたすら勉強あるのみです。




あと先日とあるデータサイエンティストにGoogleインターン行きたい旨を話したところ、来月帰国した際にGoogle Tokyoを訪問させてもらえることになりました。




めちゃくちゃ楽しみです......




全然わからないし期待しちゃいけないけど、もしこれでGoogle Tokyoでインターンできるんだったらもう留学やめてもいいなって思ってます。




天下のGoogleインターンできるんだったらこれ以上の機会はないだろうなって。




そんなこんなで本格的に来年どうなるかわからなくなってきました。




ただまぁこれでいいかなって思ったり。




このくらい行き当たりばったりの方があとになって振り返ってみていい思い出になるかもですね(?)




てことで今後のぼくに期待しててください。




多分外から眺めてる分にはいい感じのコメディになってるはずですので。




では、これからもがんばります。

GoodfellowのDeep Learningを読んだので

こんにちは、コミさん(@komi_edtr_1230 )です。




今回はGoodfellowのDeep Learningを読んだので、その書評です。



読んだきっかけ






実はもともとこの本は読もうと思ってて、8月にCSの教科書のPDFを収集してたときにすでにストックしてあったんですよね。




ぼくが日立にいたときから上司に勧められてて、京大の人工知能サークル(?)の人もこれ輪読してて、ずっと読もう読もうと思ってたんですけど他のやるべきこととかに追われててしっかり頭から読んだことなかったんですよね....




研究とかの過程でわからないところがあったとき、ちょうど去年くらいに東大の松尾研が翻訳してて無料公開してたので、それを適宜見たりって感じで.....




てことで一度はしっかり読もうって思ってたんですけど、PRMLやらカステラ本、SICPなど他に抱えてたPDFに気が向いてしまって結局ようやく読んだって感じです。



読み方






もともとDeep系の知識はある程度あったんで、基本的には知ってるところは流し読みで、不明瞭なワードとかはググったり他の書籍を参照しながら定義を確認しつつ、スタイルでいきました。




また、ちょこちょこ登場する実装とかも擬似コードを追ってちゃんと計算フローを確認しました。




読むところはちゃんと読んでテキトーなところはテキトーに流して、ってスタイルだったので700ページちょっとあったけどだいたい4日くらいで読めました。




あんまりこんなペースで読むのはオススメできないんですけど、ある程度Deep系の知識がある人ならこのくらいでもちゃんと中身は頭に入ってくると思うので、読み方については各自の工夫でって感じかもですね。



全体の感想






通しで読んでの感想としては




Deep Learningの本としては決定版だろう




という感じでした。




というのも、最近ブームのDeep系がちゃんと理論的に解釈できてネットワーク構造に意味合いを見出すという意味で非常に有用な一冊だと思いました。




最近のDeep界隈の良くないところとして、とりあえず思いついたアイデアニューラルネットに流し込んでうまくいったら論文にしてって感じで、モチベーションとかが曖昧で理論的保障もないんですよね。




流行りのGANも、単純に「こういう風にやれば面白いかも」みたいななんとなくの思いつきじゃなくて、しっかりDeep系の中でも生成モデルと識別モデルがあり、ちゃんと事前分布として何を仮定して、って理論的な裏付けがあるんだってことを理解するべきな感じがしてます。




最近のDeep界隈はなんとなく流行ってるからって外部からの参入が多くて、しかも先ほど述べたような感じであまり今のDeep界隈は好きじゃないなぁって思いはあるんですけど.....




まあそういうことは置いといて、良かったところを述べていきましょう。



ベイズ的解釈






前にツイッターで「実際のところ機械学習は事前分布を仮定しなくてもやりたいことはできてしまう」みたいなことが一瞬話題になってたんですけど、これは識別モデルの話で、生成モデルについて語ろうとすると確実にベイズを使うことになって事前分布とかが出てきます。




そういう意味でPRMLは統計的学習においてベイズをふんだんに使った解説をしていて古典的生成モデルとして名著だと思うんですけど、今回のDeep LearningもDeep系においてベイズをあらゆる箇所で使っていて、現代的生成モデルの本として非常に良くできてる本だと思いました。




まあ著者のGoodfellowがあのGANの発案者というのもあるかもですけど....




ぼくはベイズを使って数式をゴリゴリ押していくのが好きな人間なので、そういう意味でこの本は非常に好感でした。



基礎をしっかり






この本は大きく3部に分かれていて、Part 1で数式いじりのための基礎や統計的学習の基礎的なものを解説しています。




Part 2ではCNNやRNNなどのよく扱われるニューラルネット構成を説明、Part 3では最近のDeep系の研究として表現学習や深層生成モデルの話を展開します。




生成モデルの話が良かったのはそれはそうって感じなんですけど、個人的にグッときたのは表現学習のところです。




ぼく自身の興味対象として学習における汎化性能があり、Zero shot learningとかOne shot learningあたりはかなり注目してた部分なんですよね。




ちゃんと人間の脳と学習機構について言及しつつ、それをDeepで実現しようという最近の研究の方向性をしっかり提示していてぼくは感動しました。




ぜひオススメです。



まとめ






Deep Learningというとどうしてもインチキ機械学習erが声を大にしてツイッターでギャーギャー騒いでるイメージがあるんですけど、そういうインチキ機械学習erと差別化を図るという意味でこの本は是非とも読んでおくべきだと思います。




というのも、今後Deep Learningという技術を振り回すにあたって理論的な理解は必要不可欠です。




理論をないがしろにするとすぐにボロが出ます。




Deep Learningという技術はブラックボックスなのは事実なのですが、その上で「どこがどうブラックボックスなのか」ということ程度は理解しておかなければなりません。




これは機械学習界隈に身を置く自分として非常に伝えたいことの1つです。




わからないことをわからないで放置せず、何がどうわからないのか、せめて部分問題に分解するという作業は絶対に必要でしょう。




機械学習を社会実装しようという動きがあるからこそ、機械学習Deep Learningを理解しようとする姿勢は肝要です。




そんな意味でもこの本は非常に有用だと思いました。




ぜひとも一読あれ。








最近の話と今後の予定






さて、本のレビューもしたところで、最近の話とかを。




気がつけば11月も半分が終わり、12月の帰国まで1ヶ月を切りました。




.....早すぎん?




スイスに来たのが8月16日とかだったので、3ヶ月経ったことになりますね。




なんか留学生ブログとかを見てると「留学開始3ヶ月が1番つらい!」なんか書いてあったりしてて、実際そう感じるのかなって思ったりしたんですけど今のところは特にストレスもなく伸び伸びと生活しています。




まあもちろんラーメンとか牛丼は食べたいですけど、そこまで死ぬほど食べたいかって言われたらそうでもなくて、だから別に今の感情としては「日本に帰らずとも意外とやってけるなー」って感じなんですよね。




多分もともとバックパッカーとかやってたのもあるから海外への適応能力がー、って感じかもですけど....




そんなこんなでスイスに来てから3ヶ月間、特に困ったことなくのんびり留学生活エンジョイしてます。




さて、今後の予定なんですけど、まずはインターンの話。




.....Amazonからのインターンの返事来ねえ。




11月1日にAmazon UKのBristolでのインターンの推薦メール来てから全く連絡がこないという状況なんですけど、それは置いといて、なんとこの前にAmazon CanadaとAmazon USからも推薦状が届きました。




何が起きた.....俺は何をしたんだ....




意図せぬ形で世界中のAmazonインターン推薦を手に入れてしまいました....w




ということでAmazon CanadaとAmazon USもインターンの申請は出しといて、ついでに遊びでAmazon Luxembourgにもインターンの申請を出しました。




さあ、ぼくは来年はどこに国にいるんでしょうか!!!!




こんな状況だから、来年から一応で確保しといたインドのスタートアップの会社に本当にインターンしに行くかも微妙で、ぼくは今ホントに何も動けない状況なんですよね....




なんとか今月中には連絡くるといいなぁ....




まあインターン事情はこんな感じで未定です。




さて、今後の予定の話その2で、今後の勉強の予定について。




この前まで「このDeep Learning読んじゃったらあんまり読みたい本なくなるなぁ...」って思ってたんですけど、ふとコンピュータービジョンが未修であることに気づきました。




そしてすぐにCV系の本を漁ること、良さげな本が2冊ほど。




てことでこれからはコンピュータビジョンに移行します。




もともと機械学習とかでOpenCVにはお世話になってたけど、そういや中身のアルゴリズム何も知らないなぁって....




これからも勉強することはまだまだたくさんありそうです。




さてさて、今後の予定の話その3で、今後の進路について。




うーん、決まらない。




もともと東大の研究室か京大の研究室でそれぞれ良さげなところがあったのでどっちかかなぁなんて思ってたんですけど、ふと海外の大学院も割とアリなのではと思い始めたり....




てことでせっかく選択肢が絞り込めてたのにまた選択肢が増えて決まらなくなってしまいました。




もう学部3回生の11月なのにここまでボヤッとしてるのはやばいよなぁ、って思ってます。




...早く色々決めよ。








てことで今後でしっかり決まってるのが勉強の予定くらいしかないんですけど、まあ何か新しいことが決まったりしたらツイッターとかで報告します。




楽しみにしててくださいね(?)




ではお疲れ様でした!

マルウェア解析の本を読み終わったので書評

こんにちは、コミさん(@komi_edtr_1230 )です。




今回はPractical Malware Analysisという本を読みましたのでレビューしていきます。



全体の感想






f:id:komi1230:20181109054030p:plain




.....ちょっと表紙怖くない?




多分小さい子供とか見たら泣くよ....




まあそんな禍々しい表紙のマルウェア解析本ですが、読んでみての感想としては




実践に重きを置いたものすごく丁寧なマルウェア




という感じです。




読み進めててかなり面白かったし、色々クスッとくるような感じもありました。




読んでて特に良かったと思った点として

アセンブリ言語の基礎やWindows OSの基礎から始まる丁寧な導入

・超具体的とも言える攻撃手法の紹介

・実際にあるツールを使っての解析方法の紹介




というような点が挙げられます。




この本は少し古くて攻撃対象がWindows XPとかWindows 7なんですけど、マルウェアというものがどんな形でホストOSに攻撃を仕掛けるのかという基礎的な部分に関してはめちゃくちゃ勉強になりました。




やはりセキュリティを学ぶには攻撃手法を知るのが手っ取り早いだろうということで、パスワードクラッキングなどのマルウェアを想定しながら様々な解析手法が登場します。




登場するツールとして、マルウェア解析では静的解析(=逆アセンブルする)と動的解析(=デバッガを利用)に大別できるんですが、IDA ProやWiindbgなどが主なツールです。




これらはUnix系列で言えばobjdumpとかgdbに相当するんですけど、まあやってること自体はホントに逆アセンブルデバッグなので本質的には問題ないな、という印象でした。



マルウェアの攻防






セキュリティを学ぶ上での面白さは「攻防」にあると思ってるんですよね。




で、今回の場合はマルウェア作者が攻撃側、マルウェア解析する方が防御側という感じなんですけど、本書でもしっかり攻防戦をうかがわせるような箇所がたくさんあります。




例えば、この本での動的解析の章にて「マルウェアを実際に走らせるときは非常に危険なので絶対に仮想環境を使いましょう」って書いてるくせにPart 5にある第17章のアンチ仮想環境の解説部分では仮想環境を飛び越えてどうスタックやカーネルに攻撃を仕掛けるかということが解説してあり、もう完全にカオスですw




本書はPart 1からPart 3までは解析手法を解説していってPart 4ではマルウェアが実際にどう攻撃を仕掛けるか、Part 5はアンチ逆アセンブルとかアンチデバッグ、アンチ仮想環境など、いかに解析を失敗させるかということを書いてあります。




Part 1からPart 3で築いた解析方法をPart 4とPart 5で崩しにいってるし、もうこれマルウェア解析の本っていうかマルウェアでの攻撃の仕方の本じゃん....w




そんな感じで「なんだこの本....w」ってツッコミを入れたくなるんですけど、マルウェアについてはかなり勉強になるんでマルウェアに興味ある人には是非とも読んで欲しいです。




あとアセンブリ言語についての解説が割と優秀なのでそれの勉強を兼ねるというのも悪くないかもしれません。




ただ、前提知識としてカーネルとかC言語(特にポインタとか構造体)の知識があるとないとでは読みやすさがだいぶ変わってくると思うのでそこらへんは注意かもです。




無料だし450ページちょっとで1週間もあればすぐ読めると思うので興味ある人はチャレンジしてみてください!



今後の勉強






結構今までたくさんPDFを読んできて、徐々に読もうと思ってたPDFがなくなりつつあるんですよね....




現状↓ f:id:komi1230:20181109061532p:plain




絶対に勉強しようと思ってたものもだんだんと片付いていって、この積んでるPDFの中でもちゃんと読もうと思ってるのもパタヘネとGoodfellowのDeep Learning、あとはALifeくらいですかね.....




今までずっと低レイヤに潜ってきたんで次はDeep Learningに行こうかなって思ってるけど、あんまり気乗りがしない.....w




明日から勉強どうしよう....




もうPDFでの勉強も一旦終わりにしてKaggleとかCTFにガチってみるのも悪くないかなぁって思ったり....




ちょっと今はまだ悩み中ですけど、このブログが書き終わり次第決めようと思います。




では、今回は書評はここらへんで。



近況報告






そういえば最近ただ勉強記録的な書評ばっかりだったのでたまには勉強的なこと以外でしっかり近況報告をしますね。




気がついたら11月になっていて、スイスではすでに最低気温が3℃とかになったりしてるんで外に出るときはマフラーと手袋は必須アイテムです。




もうスイスに来てから2ヶ月と20日くらいなんですよね。




そして日本に帰国するのは12月14日なので、実質的にスイスにいるのは残り1ヶ月ちょっとというわけです。




早かったなぁ....としみじみ。




2ヶ月も経つと流石に生活も慣れてきて結構余裕も出てくるわけですよ。




で、生活コストを削ることもできたり割と日々もある程度ルーティーン化してきたりといった感じになるわけです。




最近の生活はというと、ぼくの場合だいたい朝9時とかに起床してスーパーに行ってバナナとかリンゴとか簡単な朝食を買い、そのあとは19時くらいまで図書館で勉強してます(授業がある時間以外もずっと図書館)。




19時くらいになるとちょっとおなかがへるのでスーパーに行って簡単にバナナとパン、エナジードリンクを買いに行き、そのあと23時半くらいまで図書館で勉強続行です(この記事を書いてるのは今この時間)




それで日付が変わるか変わらないかくらいの時間に帰宅し、たまに少し簡単な食事を作って(最近はほとんど作ってないけど)、シャワーを浴びてそのまま就寝です。




味気ない生活だなぁ...




ただまぁ8月9月を試行錯誤しながら勉強時間の最大化と生活コストとストレスの最小化を図ったところこの生活に解が収束したので、多分これがベストなんだろうと思ったり(ただの局所解で大域解ではないかもだけど)




そんなこんなでたまにジムに行ったりしてますけど基本的に図書館での滞在時間は13時間以上だったりします。




まあ今回のスイス留学は「自分がやりたいことを徹底的にやる」ということで、やりたかった勉強はこれでもかというくらいにできてるのでかなり満足度は高いですよ?




語学力に関しては、こんな感じで人とほとんど会話しない生活を送ってるのでまああまり成長なしです。




ただ英語では言いたいことはある程度言えるのでSpeakingはそこそこ、毎日教科書の原著を読んでるのでReadingもオッケー、洋楽とか寝る前にラジオ聴いてるからListeningも多分大丈夫、EPFLの事務や色んな会社とインターンのメールのやり取りしてるのでWritingも多分いけてる、といった感じで意外と英語の4技能を伸ばしていると言えるでしょう(?)




....語学がんばります。




4回生の研究室配属について、先日に希望研究室にいる先輩からアドバイスというか助言をもらいまして、無事になんとかなりそう感があります。




理学部に入ってからずっと情報系のことばっかりやってて生物系という肩書きがホントに形骸化してた感があったんですけど、希望してる研究室が数値解析系のことをやってるとこなので情報系ばっかりやってた自分もいい感じに生物系のところに着地できそうで最近少し安心してます。




あとその研究室の教授が割と柔軟に色々対応してくれる方らしく、せっかくトビタテで2020年3月まで有効な奨学金を持ってるので来月に帰国した際は卒業研究を海外で研究していいか聞いてみようかと最近画策しています。




研究先としては今はシンガポールで研究したいなぁって思ってて、なのでこの企みが成功すれば2019年はほとんど日本にいないということになりそうでちょっとワクワクしてます。




大学院について、前までは東大の研究室を考えてたんですけど最近いろんな勉強をしてるうちに京大で気になってた研究室でぼくのことを熱烈に勧誘してくれたところもいいなぁと思い始めて、とにかくめちゃくちゃ迷いまくりです。




院試は来年の夏だし、出願とかも考えたらさっさと決めておかないとなぁと焦るばかり....




とまぁ最近の活動に関してはだいたいこんな感じです。




今のところはそんなに忙しくなくて随分と平和な生活を送ってますね。




ただ、最近1つ謎めいた案件がありまして、Amazonインターンがよくわからないまま書類選考を通りました。




8月中旬にスイスに来て、ぶっちゃけ9月の時点でスイスの生活に退屈してて、それでスイス留学は1セメスターで切り上げて来年以降は海外インターンをしようってことで9月10月はインターン探しをしまくってました。




その中でGoogleとかAppleとかの名だたる企業にも出したりしてて、もちろんAmazonにも出したんですよね。




で、Amazonの中で出したのはアメリカとカナダとドイツで、アメリカとカナダは不合格だったんですけど、そんな中こんなメールが。




f:id:komi1230:20181109050340p:plain




「このメールを受け取ったあなたはAmazon Student Programに紹介(推薦?)された人です。以下のフォームを埋めてください」と。




このメールを見たときは朝で、寝ぼけてて「なんか記入ミスだったんかな」って思ってメール本文をよく見ずにさっさとフォームだけ埋めて終わらせたんです。




だけど数日後にそういやインターン関係どうなってたっけってメールを見返してみて、このStudent Programの配属先がAmazon UKのBristolで「そういや俺イギリスに出してなくね?」ってのと「てか俺のこと推薦したの誰だ...?」という二重によくわからない状況。




予想としてはインターン申請したドイツが受け入れ先としてぼくをイギリスに回した説(確かにこれなら納得がいく)を考えてたんですけど、今カナダに留学している京大の後輩も同じメールをもらってたとの報告が。




ちなみにその後輩は推薦先はAmazon Canadaだったそう。




うーん、一体何が起きているのだろう....




まあAmazonインターンが通れば毎月60万円以上お給料がもらえるらしいしぼく自身もかなりスキルアップになるので最高のチャンスなんですけど、どうも腑に落ちない感が.....w




とまぁホントによくわからない状況ですけど、今はオンラインのCoding Testが来るのを待つだけですね。




こんな感じでもう11月なのに来年自分がどこにいるかわかってないという状況ですw




一応、来年1月からはすでにインターン内定をもらってるインドのスタートアップで機械学習エンジニアをやることになりそうなんですけど、このインドでの生活がどのくらい続くのか、Amazonインターンが通ったらいつからイギリスで働くことになるのか、イギリスのビザはどうするのか、卒業研究はどの国でやるのか、大学院の院試はどうするのか。




まだ先のことだけど全く予定が立ってなくてホントにこれでいいのか感.....w




ま、別に留年しようがそこまで気にしないし人生楽しければいいので、なんかもうこのフワフワなのも悪くないかなって。




ということでこれからもがんばりますね(?)




スイスでの生活も残り1ヶ月ちょっとだけど、さっさと日本帰ってラーメン食べたいなぁって思いつつ全力で勉強しようと思います。




また書評とかあったらブログも更新しますので。




ではお疲れ様でした!

低レベルプログラミングの書評

こんにちは、コミさん(@komi_edtr_1230 )です。




今回は低レベルプログラミングという本の書評です。




前回のエントリーがLinuxカーネル本の書評だったんですけど、たったの前回の投稿日が3日前らしい....




ここ3日くらい12時間以上ずっと本読んではコード書きまくるって生活をしてたおかげでなんか時間感覚が狂っちゃってて、前回のエントリーがこんな数日前ってのが信じられないです....




なんかあんまりこんなハイペースで本読み進めてたら「こいつ実は読んでないんじゃね?」って思われそうでアレなんですけど、ちゃんと読んでますからねw




ただまぁここ数日についてはスイスに来てから最強にハードな日々を過ごしてて、ちょうど授業が休講になっててガチで12時間くらいぶっ通しでやるみたいな感じでした。




おかげさまでエナジードリンクにはだいぶお世話になったんですけど、そんなこんなで今回は低レベルプログラミングを読み切ったので書評をしていきます。



本の紹介






f:id:komi1230:20181104031815j:plain




まず最初に、多分この本のことを割と知ってる人は結構多いると思うんですよね。




低レベルプログラミングという名前は決して初心者向けという意味ではないんだけどこの名前のせいでBOOK-OFFではプログラミング初心者向けコーナーに鎮座してあった、というのが前にツイッターでネタになってたんです。




この本の著者はロシア人の方で、ロシアのサンクトペテルブルク(?)とかの大学の助教さんが書いた本なんです。




なので原著はロシア語で書いてあります。




あ、上の画像は英語版なんですけどもちろん和訳版もありますのでご安心ください。




ロシアではこの先生の授業が非常に人気で、その人気さと本の完成度の高さから英語に翻訳されたものが出て、そうして和訳版も存在するわけです。




内容としては「アセンブリ言語C言語を触ってメモリやスタックなどの低レイヤーをしっかり理解しようという」ような感じです。




ということで名前の通り、低レベルなプログラミングというわけです。




コンピュータは低レイヤーになればなるほど難解だと言われており、つまりプログラミング初心者にはしんどすぎる一冊なんですよねw




まあそんなこんなで世界的な名著を今回読んだので、早速レビューに入っていきましょう。



感想






今回は低レベルプログラミングを読んだわけですが、感想としては




低レイヤーの入門には完璧な一冊




という感じです!




もうほんとに読んでて楽しかったですね。




特に良かったと思ったのが「コードの丁寧さと解説の細かさ」です。




本書の構成としてはPart 1でアセンブリ言語の解説とアセンブリ視点でのメモリやスタックの解説、Part 2でC言語の解説とC言語視点でのメモリやスタックの解説、Part 3ではC言語コンパイルする際のメモリ構造や最適化、マルチスレッドへの対応などを見ていく感じとなります。




低レイヤーをアセンブリ視点とC言語視点で見つめるという構成のおかげで無限にメモリへの理解が進んだような気がしました。




あとこの本を読む直前にLinuxカーネル本を読んだということもあってかなりサクサク読めたので、OS周りの知識をつけた上でこの本を読むと楽しさは倍増すると思います。




それでは各パートの感想を述べていきましょう。



Part 1 : アセンブリ言語






そもそもアセンブリ言語ってなんぞやということから始まります。




よく「コンピュータは0と1の塊だ」というのは聞くと思います。




でも実際のところ人間は0と1という形ではコンピューターに命令を出さず、人が理解できる形でコンピュータに命令を出します。




これがいわゆるコンピュータプログラムというやつで、プログラミング言語の文法という形で命令規則を作ってコンピュータに命令を出すわけです。




例えばコンピュータに"Hello World!"という文字列を表示させるときにはC言語では



#include <stdio.h>

int main(void){
    printf("Hello World !\n");

    return 0;
}






という形で命令を出します。




でもこれがコンピュータが命令として理解するには最終的に0と1のバイナリに落とし込む必要があるわけです。




ただ、このような人間にもわかるような物をバイナリに落とし込むために一旦中間となる言語を挟むことになります。




これがアセンブリ言語です。




f:id:komi1230:20181104040644p:plain




一般的に、普通のウェブアプリ開発をしたり機械学習をやっていたりしていたらこのアセンブリ言語というのは触ることはないんですよね。




ただ、コンピュータの動作原理を知るためだったりプロダクトのパフォーマンスをあげようとすると低レイヤまでしっかり見て最適化する必要が出てきたりするわけなんです。




ということで前置きが長くなりましたが低レベルプログラミングのPart 1ではそんなアセンブリ言語をガチャガチャ書いていきます。




内容として、まず1章ではメモリ構造の解説を行い、2章ではアセンブリ言語Hello Worldをはじめとして関数定義など色々やります。




1章のメモリの解説で、ここでしっかり読んでrsiとかedxが何を意味してどんな構造を持ってるのかを理解しておかないと2章以降で何も理解が進まないのでちゃんと読んでおきましょう。(自分はなかなか頭に入ってこず少し手こずった)




3章ではプロセッサのモードについての話で、ユーザースペースでのメモリ構造がどのように発展してきたのかをコードとともに解説していきます。




4章では仮想メモリの話が、5章ではコードにおけるデータ処理の流れやELFファイルなどのファイルのリンクの話が行われます。




ELFファイルヤオブジェクトファイルはよく名前を聞くけどわからない、という感じだったんですけど今回これを読んである程度理解ができたと思います(完全に理解したとは言ってない)




6章ではデータの入出力やシステムコールを扱います。




そしてPart 1の最後の7章ではオートマトンの解説です。




6章までは正直なところ解説の流れが読めてたんですけど、7章で有限オートマトンでの計算フローの解説が行われるのはびっくりしましたね....(アセンブリの解説ならそれはそうという感じだが)




以上がPart 1です。




ぼくは前にオライリージャパンから出てる策謀本を読んでアセンブリやスタック周りを触ったことがあったんですけど、そのときはC言語サイドからスタック操作をしただけでアセンブリ言語についてはobjdumpで眺めるだけという感じだったので、今回アセンブリ言語をゴリゴリ触るのは初めてだったので非常に勉強になりました。




ではPart 2へ。



Part 2 : C言語






Part 2は正直なところ普通のC言語の解説という感じです。




基本文法やポインタを中心とした型システムの解説、マクロやヘッダファイルの意味をざざっと見ていきます。




ただ、これらは内容は普通ですがPart 1でアセンブリ言語をゴリゴリ触ったということで値渡しと参照渡しをアセンブリ言語で見直すというようなアプローチもあり、C言語でのポインタや配列周りは無限に理解が進むと思います。




Part 2はC言語の章ですが、Part 1で見たようにPart 2でもメモリの解説が入ります。




もうこれでもかと言わんばかりにメモリの解説を行います....w




まあそんなこんななのですが、個人的にびっくりしたのはPart 2最後の13章で「いいコードの書き方」を解説した章が設けられている点でした。




内容としてはリーダブルコードに書いてありそうな内容(リーダブルコードを読んだことがないので細かくは言及できないが)で、命名法やオブジェクト指向でよく言及されるカプセル化などについて書いてあります。




低レベルプログラミングという題名の本でありながらそういうことも書いてあるのか、と笑ってしまいましたね...w



Part 3 : C言語アセンブリ言語のつながり






一般に、C言語を書いて実行しようとするときはgccコンパイルして実行ファイルを作成します。




14章, 15章ではC言語からアセンブリコンパイルしたものをlldなどのコマンドでリンクさせた上でアセンブルする、というようなことを行うなどしてコンパイル家庭でのメモリ構造を解説していきます。




16章ではコンパイル時における最適化とパフォーマンスの向上、17章ではマルチスレッド化を議論していきます。




ここらへんは読んでて1番楽しかった部分かもしれません。




というのも、Part 1ではアセンブリ言語に焦点を当て、Part 2ではC言語に焦点を当ててきましたが、Part 3ではそれらの知識をフル活用して全体の流れを触っていくのがなんとも快感でした。




特にマルチスレッドの章で、ぼくは今まで並列処理に興味があったものの中身は得体の知れないものという認識だったのですが、今回勉強してかなり理解できたような気がします。



まとめ






以上、かなり長くなってしまいましたが低レベルプログラミングはホントにいい本でした。




ここらへんの低レイヤの話はリバースエンジニアリングなどの話にも直結していくので、最近セキュリティに興味ある勢としては読んでよかった本だと思います。




本当に勉強になるので、おすすめの一冊です。



今後の予定






さて、スイスに来てから爆速でいろんな分野を勉強してきたんですけど、これで一応やりたかったことはひと通り回れたんですよね。




特に気にしていた低レイヤの分野も勉強できました。




ただ、これらのことを知識として持ってるだけで実際のところはまだそこまで手を動かせてないというのが現状です。




最終的な目標は「CTFで勝てるようにする」という感じなんですよね。




日本にいた頃はずっと機械学習をやってて、これは個人的な意見なんですけど機械学習はどうもマシンパワーでゴリ押してる印象があって、あんまり美しくないなぁって思うようになったんですよね。




Kaggleとかでも最近は画像系のタスクが多くて、GeForceGPUを持ってないぼくは人権すらないわけです。(Google Colabはあまり使いたくない)




ということで機械学習を今後突き詰めるよりかは機械学習の理論と実装経験をあくまで一つのスキルとして持っておいて、その上でセキュリティの分野に走ろうと考えたりしてる今日この頃です。




何かプロダクトを作ることよりも出来上がってるシステムを眺めたりするのが好きな身としてはあまりアプリ制作をやりたい気持ちがなく、だからCTFは今後の自分にとっていい目標かなぁって考えてます。




そんなわけで、明日からはマルウェア解析の本から勉強しようと思います!




PDFはすでに用意してあって、Practical Malware Analysisというのがググったら良さげだったので、明日からはそれを読もうかと。




今回は1000ページ以上あってかなり骨の折れる量なんですけど、今まで通り根気よく勉強していこうと思います!




では、ちょっと今回は長くなっちゃいましたけどここら辺で。




お疲れ様でした〜