2018年の9月から香港科技大学(HKUST)でコンピュータ・サイエンスを勉強しております。正規生の留学後初&理転後初のセメスターというのもあって最初は勝手もよくわからない部分もありましたがなんとか乗り切ったので忘れないうちに詳細をメモしておきます。


コンピュータ・サイエンスの授業


履修科目:

専門科目としては人工知能関係のものを中心に取ってます。エンジニアとして働いていたときにネットワークのしくみがイマイチ理解できた気がしなかったのでComputer Networkも迷いましたが、最初の学期なのであまりコンピュータ・サイエンスの専門知識が要りそうな科目よりも数学や統計学だけでなんとかなりそうな科目、似た内容を扱う科目で固めることにしました。おそらく1−2科目+その他の卒業要件科目みたいな履修が一番メジャーなモデルなので、相場としては3科目はけっこう多い方です。同期と話すとよく驚かれます。


授業の印象


授業の難易度は、簡単、というかあまり凝ったものを出さない印象が強いです。普通に授業でやったことをきちんとやれば満点やそれに近い点数がとれる科目ばかりだと思います。逆に問題がかんたんで平均が90点くらいとかざらにあるのでA−以上の成績をとるのがは相当むずかしいと思います。


内容としてはどれもコンピュータ・サイエンスの前提知識をそれほど要求しないものだったので普通に微分、確率統計、少し線形代数の知識があれば快適に勉強できるという感じです。もともと学部は経済学を専攻していたのですが、授業ではラグランジュの未定乗数法やゲーム理論もよく使っていたので、むしろコンピュータ・サイエンスで学士を取った人に負けず劣らずに快適だったのでは、とさえ思っています。ただ、以前勉強したことのない計算の困難さ(計算量やNP-完全など)についての言及がときどきあり、それに基づいて同じ目的のアルゴリズムを比較したりするのでその部分は完全についていけてないです。このあたりはこれからもお世話になりそうなのでそのうちにコツコツと勉強しておきたいです。


反省としては、慣れの問題なのかちょっと力みすぎてしまった気がしています。他の大学にD進する際のGPAや受給している奨学金の成績要件を意識しすぎてプレッシャーになり、逆にあまり効果的に勉強できなかったり並行してすすめるべき研究の方をおろそかにしてしまったきらいがあります。次期はもうちょっと気楽に構えて研究のほうも頑張って生きたいと思っていますが。。。


今学期のハイライト: Sticky Samplingアルゴリズム


Knowledge Discovery in Databaseの授業で扱った話題でSticky samplingアルゴリズムが一番面白かったのでざっくりと説明します。Sticky Samplingアルゴリズムとは、無限につづいていくデータ列から一つずつ要素を受け取って、そのデータ列に現れる相関ルールよばれる法則性を発見するための乱択アルゴリズムのひとつです。


相関ルールが何かはちょっと面倒なので改めて説明したいと思いますが、有名な例では「おむつとビール」というのがあります。あるアメリカのスーパーマーケットでよく一緒に購入されるものを調べたところ、おむつとビールがよく一緒に売れることが判明し(どうもお父さんがおつかいでおむつを買うときについでにビールを買うらしい)、それぞれを近くに配置して売上を伸ばしたという(嘘っぽい)話がありますが、この「おむつとビールは一緒によく買われる」は代表的な相関ルールです。


相関ルールの発見ためにはそれぞれの要素(たとえばおむつ、ビール)の出現頻度(購入頻度)を記録していく必要があるのですが、それらをすべて網羅するにはかなり大きいサイズのメモリを用意する必要があります。そこで、Sticky Samplingアルゴリズムは記録してあるデータを確率的に削ったり、出現する要素を無視したりしながらメモリ消費を抑える、という方式をとります。その代わり発見される相関ルールは少々信頼できなくなるという欠点があります。


相関ルール検出のアルゴリズムの出力の信頼性をはかる基準で$\epsilon$-deficient synopsisというものがあるのですが、Sticky Samplingはこの基準をユーザが望む確率で満たせることがわかっています。つまり90%の確率で$\epsilon$-deficient synopsisをクリアしたいときにはメモリを○○だけ用意する、より高い95%の確率でクリアするときには追加でxxのメモリ消費を受け入れるというようにそれに見合ったコストを支払えばいくらでも出力の信頼性を高めることができるのです。この性質が学期の間に自主ゼミでやっていたPAC学習と概念的にかなり似ていると思い、類似点相違点を整理してまとめて理解したいと燃えています。Sticky samplingアルゴリズムに関しては日本語の記事もなさそうなのでぜひ一度整理して記事にしたいです。


外国語

英語

行く前は研究の内容を話せるかどうかイマイチ自信がなかったのですが、意外になんとかなりました。それほど凝った英語の表現をしらなくても専門用語の英語さえしっていれば専門家同士のコミュニケーションは随分と楽になります。あとは英語でなんといえばよくわからなくても数式でがんばって説明できるのが助かりました。今の英語力に若干の不安はあるのですが、かといって今更勉強したくもないのでずっとこのままだと思います。


中国語(普通語)


アメリカではなく香港に進学しようと決めた理由の一つが「中国語(普通語・広東語)を勉強したい」という思いがあったからなのですが、当初思ってたよりも全然進捗がよろしくなく凹んでいます。。


まず1人では絶対に勉強しないと思って中国語のランゲージエクスチェンジ(?)プログラムに参加しました。大学が主体となって中国人・香港人の学生1人と5−6人の中国語学習者でチームをつくり、BBQやらムービーナイトやらでわちゃわちゃする感じのプログラムでしたが、これが自分にまったく合っていなかった。。。若い学部生(17歳!)の元気なノリについていくのがしんどい、話題があわない、そんなに興味のない外出がある、とインドア派の僕には大変厳しいもので、自分で中のいい中国人の友達に習うほうが100倍楽しいし勉強になるというのが正直な感想です。もう来学期は絶対に参加しません。


広東語


香港では公用語こそ普通語とよばれる中国語の標準語が使われていますが、現地の生活では広東語といわれる方言がメインで使われています。方言だからなのか中国語のふるい表現をたくさん残しているようで、日本語と共通の語彙もたくさんあって大変に面白い言語です。以前香港に留学したときに少し覚えていてもともとは普通語よりもこっちのほうが分かる感じだったんですが、今回はあまり勉強する時間を取れませんでした。一応、店や食堂では意識的に広東語を使うようにしており、なんとなく注文ができるようにはなってきたものの日常会話レベルにもならないですね。


来期の展望


卒業要件のbreadth requirementを満たすためにAI・DB以外のコンピュータ・サイエンスの授業をあと2つ取らないといけません。コースカタログを見る感じ数学・統計学・経済学だけでなんとかなりそうな科目が少なく、OS・ネットワーク・セキュリティ・グラフィクスのどれかの知識が前提になっているものが多そうです。コンピュータ・サイエンスを学部で体系的に勉強したことのない自分の知識でどこまでやれるか不安はあります。けっこう興味ある話題もあるし、学ぶいい機会にはなるんでしょうけど成績がいろいろと重要になる大学で、あまり不慣れな話題に授業として向き合いたくないというのが正直な感想です。いくつか授業にでて数学色のつよい授業を適当にえらぶ感じになりそうです。


あとは語学に力を入れていきたいと思ってます。

奨学金の要件として中国語を、卒業の要件として英語(アカデミックライティング)を取らないといけないのでまずはこのあたりの義務を済ませたいです。特に中国語は授業で習うことをきちんと身につけて来期でなんとか簡単な会話ができるようになったらと思います。


研究のほうはコースワークのある初年度はそれほど取り組めなくてもいいよとは言われていますが、さすがになにも進めないのはあとが怖いので、来期には一定の成果をだしていきたいです。テーマとしては論理学と経済学をつかった領域になるので、文献高毒に合わせて自習やゲーム理論の授業にでるなりしてこのあたりの基礎を伸ばしていきたいです。