【CS授業紹介 #2】NLP :自然言語処理
前回は、私がUSCで受講した講義紹介として、アルゴリズム解析を取り上げました。今回は、いわゆるNLP(Natural Language Processing)と呼ばれる、自然言語処理の授業を紹介しようと思います。
そもそも自然言語処理ってなんだ?
自然言語処理とは、私なりに言い換えると、人間が使う英語や日本語、スペイン語などの言語を、コンピューターに認識させて処理する技術のことです。例えば、Googleの検索エンジンやチャットボット、DeepLといった自動翻訳アプリには、NLPのアルゴリズムが用いられています。
授業の担当教授は、「自然言語処理の分野は、言語学とコンピューターサイエンスの複合領域だ」と言って授業をスタートしました。また、「そもそも人間が使う自然言語には、曖昧な部分が多々あるので、完璧な自然言語のモデルは存在しない」とも言っていたのが印象的でした。
例えば、英語でBankという単語があります。Bankというと、まずは「銀行」という訳が、思い浮かびますよね。実はBankには、銀行に加えて「川の岸、土手」という意味もあります。
私たち人間は、こうした異義語に対して、使われる文脈などから判断して、無意識にBankの意味を解釈しています。ところが、コンピューターは、自然に文脈を読んだりすることができません。では、どのようにしたらコンピューターが、言語の意味を高い精度で理解して処理できるのか?これが、自然言語処理の永遠のテーマなのだと思います。
授業の進め方
では、実際の講義の進め方について紹介します。私がこの講義を受講したのは、2022年の春学期でした。講義は、週に2回、各2時間程度の長さで実施されます。学期通して合計15週です。担当教授は、 Ron Artstein先生とMuhao先生という方の2人体制で行われました。Ron先生は、元々言語学を研究し、その後コンピューターサイエンスの領域に研究を広げた方で、人間の自然言語の性質などをわかりやすく説明してくれました。
また、Muhao先生は、最近流行りのニューラルネットワークを使った言語処理を得意とされている研究者でした。二人の異なるバックグラウンドによって、授業内容がバランス良く補完され、個人的には、面白い授業だったなと感じています。
指定の教科書などは特になく、その都度、先生からテキストや論文がシェアされて、必要に応じて読み込むという感じです。基本的には、授業のスライド資料に沿って、進められました。
自然言語処理のタスク例
自然言語処理の基本的な流れは、かなりざっくり言うと、
1:文章や単語データを分割して蓄積
2:それらのデータをモデルに学習させる
3:学習したモデルに、新たなインプットを流し、判別処理する
(※教師なし学習などを使う場合は、異なる処理となりますが、ここでは省きます)
という流れです。
簡単な例をもとに考えてみましょう。ニューラルネットワークを用いて、簡単なテキストとその内容分類をするタスクを行うとします。
トレーニングデータとしては、次のようなテキストと、ラベルのセットがあると仮定しましょう。
テキスト:今日は天気が良いですね & ラベル:挨拶文
テキスト:今日の天気はどうですか & ラベル:疑問文
こうしたトレーニングデータには、まず前処理として、句読点や、意味のない「は」や「が」などを除去する作業を施します。そして、残った単語を全て、コンピューターが扱える数字、数列などに変換します。例えば、下記のような具合になります。
テキスト:今日 天気 良いですね ラベル:挨拶文
[5 1 3] [3]
これで、トレーニングデータの「今日は天気が良いですね。(ラベル:挨拶文)」というテキストデータが、[5 1 3][3]という、1✖️3次元のベクトルと、数字ラベルに変換されました。あとは、同様の作業を、他のトレーニングデータにも施していき、第一ステップの前処理は完了です。
次に、前処理したデータをモデルに学習させるステップです。下の図は、ニューラルネットワークのモデルに前処理したデータを適用している例です。具体的には、モデルのinputデータに”今日 天気 良いですね”にあたる、[5 1 3]という数列を入れ、outputデータに挨拶文というラベルに該当する、[3]を入力します。
“今日 天気 良いですね”&“挨拶文”というデータセットの他にも、たくさんのトレーニングデータを当てはめ、モデルの中間層の重み付けなどを調整していきます。そして、トレーニングデータによる学習を何度か繰り返し行い、判定精度を高めていきます。
実際のコードにおいては、トレーニング段階での判定精度をチェックしながら、ある程度、判定精度が高まってきた段階で、トレーニングをストップさせるプログラムを書いています。下記は、私が課題で書いたプログラムの一例です。
図の中段付近にある、”Epoch 1/3”というのが、モデルを学習させた結果表示で、学習1周目という意味です。学習1周目では、判定精度(Accuracy)が0.6462でしたが、3周目になると0.8544まで高くなりました。十分な判定精度だと考えたので、私は、3周でトレーニングを終了しました。
最後に、新たなデータを用いて、このモデルによる判定を実験します。例えば、”明日はどんな天気になりますか?“などのインプットデータを複数与えて、文章ラベルを判定させ、精度をチェックします。
図の下の方に、結果が出ています。新たなデータで判定を試したところ、精度は、0.829でした。三流プログラマーの私にとっては、まずまずの精度だったと思います。。
以上が、ニューラルネットワークを使った、自然言語処理の一例です。
なお、授業においては、ニューラルネットワーク以外にも、様々なアルゴリズムや言語処理のタスクに触れて学びました。授業で扱った内容は、大きく分けて下記の3つのような感じでした。
→ナイーブベイズや、ロジスティック回帰、パーセプトロンアルゴリズムなど、基礎的な機械学習アルゴリズムをレビューし、それらが、実際の言語処理にどのように活用されているか、という内容です。また、ニューラルネットワークを使ったモデル、近年話題のTransformerモデルについても学びました。
<2 NLPに必要不可欠なタスクの理解>
→文章データのトークン化(単語などの小さな塊にデータ分割すること)、word representation(単語データの集まりを意味のある形で整理すること)、単語の分類ラベルづけ(人、場所、モノなど)、文章要約、などです。
<3 実際のデータを使った実践ワーク>
個人で取り組むプログラミング課題4つと、チームで取り組む言語処理プロジェクトが1つありました。
課題や試験、成績評価など
成績評価方法は、担当教員によって、異なるので参考にならないかもしれませんが、私の時は、グループプロジェクトが全体の40%, その他は個人課題(4つの個人プロジェクト)によって評価されました。
<個人課題>
先ほどのニューラルネットワークによるタスクのような、判定精度を高める課題に4種類取り組みました。与えられたデータセットをどれだけ高い精度で判定できたかどうかが、評価ポイントになります。提出後は、クラスメンバーの判定精度に関するリーダーズボードが示され、その順位によって採点されます。下記のグラフは、その採点資料の一部です。
ちなみに私は、この課題における判定精度は、83%でした。ご覧いただくとわかる通り、クラス内で下から1/4にも届かない順位になります…。。。。深夜まで頑張って提出しても、毎回こんな感じの結果を突きつけられるので、死にたくなります。おっと本音が出てしまった。
<グループプロジェクト>
メンバーと話し合って、研究課題を決め、自然言語処理のアルゴリズムを用いて、結果評価と考察を行うプロジェクトでした。私たちのグループは、映画の字幕データとIMDB(Internet Movie Database)に公開されている評価レーティングのセットを用いて、字幕データから評価レーティング予測を行うプロジェクトを行いました。最後の授業では、各グループがポスターセッションを行い、楽しい雰囲気で意見交換をすることができました。
グループメンバーがみんな優秀で、とてもスムーズにプロジェクトを進めることができました。インドから3人、ドバイから1人と私。最後の授業後に、スタバで打ち上げしたのは、今でも良い思い出です。4人のうち、2人はMeta、1人はAmazonで夏のインターンをすると言っていました。今も元気にしているかな〜
私にとっての学び
成績評価については、思わず暗い気持ちになるので、私なりの学びを最後にまとめます。
まず、チームプロジェクトや講義の過程で、様々な関連論文を読み込む機会に恵まれました。これによって、今の言語処理学会でどのようなトピックが議論されているのか、近年話題となった論文はどんな内容だったのか、など言語処理学会の入り口を覗けた気がします。(勘違いかもしれませんが)
例えば、講義で読んだ論文の中でも特に印象的だったのが、下記の論文です。
この論文は、現在話題となっているTransformer型大規模言語モデルの先祖とも言える論文です。ここ数年の言語処理系の学会においても、とても影響力のある論文だったそうです。内容については、ちっとも理解できませんでしたが、なんと言ってもタイトルがカッコイイ!!(感想が小学生)
この講義を受けて半年くらいが経った後、Chat-GPTが流行り始めました。その時、このTransformerの源流となった論文を思い出したのです。この論文を読んで、Transformerの前後を少し知っていたので、N L Pの歴史的なタイミングを身近に感じられて、少しテンションが上がりました。
他にも色々と学びになりましたが、まあこんな感じですかね。
以上、今回は、N L P(自然言語処理)の講義について紹介しました。参考になりましたでしょうか。
それでは!
【CES見学感想】一番得をしているのはラスベガスの街
今回は、今年1月にLas Vegasで行われたCESに、こちらの大学院生として参加してきたので、そのことについて感想をまとめてみます。
そもそもCESとは??
CESとは、Consumer Technology Associationという団体が、毎年1月にラスベガスで行っている、展示会のことです。Consumer Technologyなので、要するに家電製品全般に関する展示会です。一般消費者向けのものではなく、業界関係者向けの展示会となっています。詳しくは、Wikipediaを参照ください。
参加するためには、事前登録が必要であり、業界関係者であることを示すか、大学関係者は、大学のIDをuploadすると、承認されます。私は、こちらの大学院生として登録したところ、最終日のみという条件付きですが、無料で入場できました。(展示は、1/5〜8までの4日間開催)
通常の業界関係者として入場するためには、100ドル〜300ドルほど支払う必要があります。聞いた話だと、開催数ヶ月前の段階で事前登録すると、参加費は100ドルほどで済むようですが、直前に登録すると300ドルまで値上がりするようです。ご興味ある方は、早めにチェックした方が良いと思います!
会場の様子
私は、最終日のみの参加でしたので、全体的な印象としては、あまり熱気がなく、展示側も若干疲れている印象を持ちました(笑)
CESは、ラスベガス内の複数の地点で展示されているので、そもそも1日で回りきれないボリュームでした。従って、私の下記の感想は、あくまで私が見た範囲での主観です。
感想①参加者層に偏り(アジア人の男性が多い)
まず、私が感じたのは、ラスベガスの街を歩いている人たちと比べて、異様にアジア人の中年男性が多いと感じたことです。
でも考えてみれば、当然なのかもしれません。今や家電業界のメインプレーヤーは、その多くがアジアにあります。例えば、韓国や台湾の大手企業、日本で言えばSonyなどです。これらアジアにある家電系大企業は、男性社員が比較的多く在籍する重厚長大企業です。従って、CESのような展示会となると、そのような大企業から中間管理職の男性が多く結集するということなのだと思います。
私がパッとみた範囲の印象ですが、彼らの多くは、展示ブースでも会社の仲間と母国語で雑談をしており、それほど商談に熱を入れているようには見えませんでした。つまり、彼らの本当の目的は、会社経費でラスベガスを楽しむことなのだと思いました(笑)
私が、とあるアジア系企業のブースで、商品について質問したところ、その中年男性社員は、開口一番「Sorry, I cannot speak English」と質問をシャットアウトして、無言でチラシを渡してきました。思わず笑ってしまいました。
感想②VIPを取り巻く黒のスーツ集団はアジア共通?
私が会場を歩いていると、ある日本企業ブース周辺で、異様な黒いスーツ集団を見つけました。よく見ると、その中心に西村経済産業大臣がいらっしゃいました。周辺の取り巻きは、20人近くはおり、そのほとんどは黒いスーツを着て、無駄にピリピリしていました。開放的なラスベガスの街とのコントラストが異様で、笑ってしましました。
私は、「ラスベガスの街で、なんと日本的な儀式をやっているのだろう。相変わらずだなぁ」と思って見ていました。
すると、10分後くらいに、また黒いスーツ集団を見つけました。あれ?また日本のV I Pかな?
よく見ると、韓国系企業のオーナーらしき人が視察をしており、その周囲を黒いスーツ集団が取り囲んでいるところでした。
いやはや、V I Pを取り巻く黒いスーツ集団は、アジア共通の文化なのだろうか。多かれ少なかれ、アジアの企業文化は、似たり寄ったりなんだなぁと、思ったのでした。
感想まとめ:一番の勝者はラスベガスの街である!
以上、ブース見学よりも人間観察に時間を費やした私のCESでしたが、全体的には、コンセプト展示が多く、あまり具体的な商談を趣向しているものではないという印象でした。
企業サイドからすれば、CES自体に効果があるかはわからないものの、「この商品はCESにも展示されたんですよ」という宣伝文句にはなります。現実的には、実績作りの側面も強いのだろうなと感じました。
もし仮に、そうだとするならば、このCESによって一番得をしているのは、ラスベガスの街ということになります。アジアの大企業が、高い経費を払って展示をし、夜はラスベガスの街に、会社員達が金を落とすわけです。これぞ展示会ビジネス!さすがラスベガスですね。
ということで、今回は、CESに初めて参加した感想をまとめました。ちょっと視点が偏った感想になっちゃいましたね。。
それでは!
【キャンパス紹介】南カリフォルニア大学の様子
今回は、私が通う南カリフォルニア大学のキャンパス紹介をしようと思います。写真と共に、ゆる〜く紹介していきます。
南カリフォルニア大学の良いところ:天気が良い!!
カリフォルニア州ロサンゼルスにある南カリフォルニア大学。なんといっても、気候が抜群に良いです。上の掲載写真は、冬の1月に撮影したものですが、年間通して暖かく、ほとんどが晴れ。こちらに来てから、コートやダウンを着る機会が激減しました(笑)
大学の課題が大量に出されたり、米国の生活に慣れることに苦労するなど、大変なことはたくさんありましたが、個人的には、この気候に救われた気がします。多少しんどくても、外に出ると気分が少し良くなります。
こちらは、大学のシンボルとなっているTrojan像。
キャンパスの唯一の難点は、周辺の治安が、比較的悪いことです。ロサンゼルスのダウンタウンは、元々治安が悪くて有名ですが、キャンパスもダウンタウン近くにあるので、夜間の歩行などは気をつける必要があります。ただし、大学周辺は、USCのセキュリティスタッフが常に巡回しているので、個人的には被害を受けたことはありません。
キャンパスでの過ごし方
キャンパスでは、学生それぞれが、思い思いの時間を過ごしています。キャンパスの至る所にベンチがあったり、芝生エリアがあったりするので、座る場所に困ることはありません。
毎週水曜日には、Farmers marketが開かれます。地元農家の野菜が売られたり、フードトラックが来て、色んな食べ物を売ってくれます。聞いたところによると、ロサンゼルスは、全米でも農業が盛んなエリアなようです。私が住んでいるトーランスでも、盛んにFarmers marketが行われています。
下の写真は、大学内のBookstoreの様子。アメリカの大学といえば定番の大学名の入ったスウェットやパーカーなど、様々なグッズが手に入ります。私の大学のショップは、ChampionやNikeとコラボした製品も多くあり、普通に品質が良いので、普段着としてよく購入します。
また、キャンパス内は、結構広いので、ゴルフカートサイズの相乗りカートや、巡回バスなどが通るので、普通に道路があります。
個人的に好きな場所:図書館
授業の合間は、大量の課題消化に追われます。。。そんな学生が、キャンパスで最も多くの時間を過ごすのが、図書館です!!大学内には、様々な学部がそれぞれ図書館を保有しており、必ず自習スペースも完備しています。
個人的に好きな図書館を二つ紹介します。1つ目は、School of Philosophyの建物にある図書館です。古いヨーロッパ風な建物で、ハリーポッターの映画に出てきそうな雰囲気が漂っています。天井も高く、静かな部屋なので、自習に集中できる場所です。
2つ目は、建築学科にある図書館です。それほど新しくない建物ですが、剥き出しのコンクリートと、天井から入る日光のバランスが良く、人も多くないので、好きな図書館です。
他にも、少人数でグループワークができる部屋や、24時間オープンしている図書館などもあります。要するに、「勉強する環境は整えたのだから、成果が上がらなかったら、あなたの責任ですよ」ということなのでしょう。。。環境は充実しているだけに、全て自己責任だと感じてしまいます。これも欧米のアカデミック独特の厳しさなのでしょう。
以上、今回は、キャンパスの様子を紹介しました。参考になりましたでしょうか。USCは、ロサンゼルスという都会にありながら、綺麗なキャンパスと、素晴らしい気候に恵まれたところだと思います。受験を検討されている方、ぜひ頑張ってくださいね!
それでは!
【C S授業紹介】アルゴリズムってなんだ?
前回までは、USCコンピューターサイエンスの全般的なカリキュラムについて、紹介しました。今回は、私が受講した講義内容について、具体的に紹介したいと思います。まずは、全コンピューターサイエンス修士学生の必修科目である、アルゴリズム解析(Analysis of Algorithms)の授業です。
そもそもアルゴリズムってなんだ??
エンジニア経験のない私にとって、いまいちピンとこなかった「アルゴリズム」という言葉。そもそもアルゴリズムとは何でしょうか。私なりに言い換えると、「処理の順番」だと考えています。
プログラムというのは、ある問題解決(計算するとか、自動でメッセージ送るとか)のために、プログラミング言語によって書かれるものです。目の前の問題に対して、どのような処理をどのような手順で行えば、解決するか。この手順の集合体がアルゴリズムです。つまり、問題解決の道筋を考えるということなのだと思います。
実際、私が受講した担当教授も、アルゴリズムの授業のことを「This is not the programming practice. It is the course for problem solving.」(これは、プログラミングの練習ではなく、問題解決を学ぶ講義だ)とおっしゃっており、なるほどと思いました。
というのも、私自身、プログラミングを学び始めた頃、入門書を購入して、一通りの文法を学びましたが、いまいち上達できなかった経験があったからです。簡単な関数作りならできるけど、それらが複合的に機能するプログラムが書けない。なぜか?それは、アルゴリズムを考えることに慣れていなかったからなのです。
簡単な例に例えてみましょう。いまあなたは、カレーライスを作ろうとしています。言い換えると、あなたは、カレーライス作りという課題を解決したい状態です。では、どうすれば作れるでしょうか?当然、材料を揃えて、ジャガイモを切ったり、肉を炒めたり、煮込んだりする必要がありますよね。これらの料理の手順が、アルゴリズムなのです。
私は、大学院でのアルゴリズム解析の講義を経て、プログラミングをする力が格段に高まったと実感しています。もし、この記事をお読みのあなたが、プログラミング入門書を読み終えて、伸び悩んでいるならば、アルゴリズムの訓練を積むと良いかもしれません。
授業の進め方
大学院での講義に話を戻します。講義は、週に1回、3時間半程度の長さで実施されます。学期通して合計15回です。担当教授は、Shamsian先生という方で、過去受講した学生からも、”授業がわかりやすい”と評判でしたし、私もその通りだと感じました。
教科書は、アルゴリズム分野において、昔から名著として名高い、「Algorithm Design (Jon Kleinberg, Eva Tardos著)」でした。
ちなみに、日本語翻訳されたものをネット検索したら、かなり高い価格でした。。。代わりに、下記の日本語文献は、Algorithm Designも参考にしつつ、わかりやすくまとまった参考書だと考えています。初学者にもおすすめです!
授業スタイルについては、教科書のトピックに沿って、毎週1つの有名アルゴリズムを取り上げて、先生が解説し、最後に例題を解いて、そのアルゴリズムの使い方に慣れる、という方法で行われました。
私にとって意外だったのは、講義や課題、試験において、PCやプログラミング言語を使わずに、紙とペン(iPad含む)によって行われたことです。先生曰く、PCでプログラミング言語を用いて実装すると、言語固有の文法ミスや環境設定起因のバグなどに囚われやすくなるので、まずアルゴリズムの訓練を積むためには、紙に、考えをデザインすることが大事だとおっしゃっていました。
課題や試験、成績評価など
<宿題>
授業を聞いたら、翌週までに宿題の問題を解き、提出します。後日、採点されて電子データで返却される仕組みです。この講義の成績評価は、ほとんど試験結果によって、決まるものだったので、宿題の採点結果には、一喜一憂せずに済みました。宿題の例は、こんな問題でした。
あなたは、Lリットルの液体が入るボトルを持っています。今、N種類の液体があり、それぞれの体積はL1,L2,,,,Lnリットルとします。このN種類の液体には、それぞれ数値V1, V2, ,,,,Vnの値がセットで付与されています。あなたのボトルに、これらの液体を混ぜて入れ、数値(V1〜Vn)の合計が最も大きくなる入れ方のアルゴリズムを考えなさい
これは、貪欲法(Greedy Algorithm)というアルゴリズムを学んだときに解いた問題です。解答例としては、次の通りです。液体を入れる前に、N種類の液体に対して、各値Vを各体積Lで割り、リットルあたりのVを算出し、その値の大きい方から並べ、その順番にボトルに入れていく、というものです。
このように、実際の問題を目の前にして、解決への道筋を考える訓練を積んでいきます。これが、実際のプログラムを書く場面でも活きてくるのです。
講義では、貪欲法の他にも、マッチング、グラフアルゴリズム、動的計画法、ネットワークフローアルゴリズムなどを扱いました。
<試験について>
試験については、中間テスト2回と期末テスト1回が、行われます。従って、3回の試験結果によって、成績評価が決まります。 この頃は、まだコロナが流行っている時期だったので、オンライン形式で実施されました。Open-book形式であったので、教科書や参考書を読みながら受けてオッケーな試験でした。
ちなみに、他のアメリカの大学においても同様だと思いますが、私の大学院でも、成績評定の平均がB以上でないと卒業資格を得られません。多くの授業評価は、相対評価なので、どの授業においてもB以上を取るために、必死になって努力する必要があります。私は、ただでさえC Sバックグラウンドがないし、特別数学ができるわけではないので、毎回死に物狂いで勉強しています。
それでも毎回のテストはこんな成績です。
見よ、この無様な結果を。。。でも、全力で戦って、この結果なので、仕方ありません。インド人が優秀過ぎるだけなんだ、と自分に言い聞かせないと、やってられません。はあ。
ちなみに、だいたいどの授業でも、毎回の試験の度に標準偏差や平均点、自分のクラス内での位置などが、明示されます。私は、もれなく毎回凹んでいます。
私なりの学び
成績評価や、無事卒業できるかについて考えていると、思わず暗い気持ちになるので、私なりの学びを最後にまとめます。
まず、アルゴリズムを考えることが、楽しいことだと気づきました。今までは、プログラミングの細かな文法やバグに囚われてばかりでしたが、今は、プログラムを書く前に、アルゴリズムのデザインに時間をとり、紙に描きながら、その時間を楽しむようにしています。
そして、紙とペンを使ってアルゴリズムを書く訓練が、プログラミングの実装力に繋がるということが、私にとっては新鮮でした。このようなことを、アメリカで教わる、というのも意外でした。日本で、このようなことを教えてもらったことがなかったからです。
最後に、この授業を踏まえて、僕自身も、プログラミングを学ぶ人向けに、オンラインで「アルゴリズム勉強会」を実施するようになりました。時折活動しているCode for AICHIの活動として、今は、小学生向けに、様々な形でアルゴリズムを楽しんでもらう会を実施しています。(このような活動も今度紹介しますね!)
以上、今回は、アルゴリズムの講義について紹介しました。参考になりましたでしょうか。
それでは!
【米国留学】コンピューターサイエンスって何を学ぶの?
今回は、南カリフォルニア大学院(USC)のC S修士課程でどんな勉強をしているのか、について紹介したいと思います。現在、留学を検討されている方や、コンピューターサイエンスの勉強内容に興味がある方にとって、参考になれば幸いです。
プログラム構成
USCでは、Department of Computer Scienceという学部名のもと、さまざまな修士課程プログラムが用意されています。(以下は、Computer Scienceの各種プログラムのトップページリンクです)
受験者は、志願先のプログラムを選んで、書類選考をし、合格オファーがもらえたら、そのプログラムで入学する権利を得ます。2022年8月現在、Department of Computer Scienceでは、下記のプログラムがあります。
・Master of Science in Computer Science(General)
→ General コースと書いてある通り、もっとも一般的なプログラムです。USCのCSの中では、必修科目の縛りも少ないコースのため人気です。
・General コースに加えて、下記の通り、一部の領域に特化した修士課程プログラムもあります。
/Artificial Intelligence/ Data Science / Game Development / Computer Security / Computer Networks / Software Engineering / Intelligent Robotics / Multimedia and Creative Technologies / High Performance Computing and Simulation
これらは、特化した領域の関連科目を多く勉強するコースです。
・上記に加えて、私が学んでいるのが、Scientists and Engineersコースです。
Generalコースと、一部特化コースは、出願の段階で、学部レベルのコンピューターサイエンスを修了していることが求められます。Scientists and Engineersコースは、その他の理系学部を卒業した人向けのコースとなっています。
こうして見ると、プログラムが細分化して見えますが、実際入学すると、異なるプログラムの学生が同じ授業を受けることも非常に多いです。また、一部特化コースで入学し、学期途中でGeneralコースに変更する学生もいるので、実際はかなり柔軟です。しかし、私が所属しているScientists and Engineersコースだけは、他コースへの変更が不可で、取得単位数と必修科目数が比較的多いプログラムです。(backgroundがない分、多く勉強しろということなのでしょう)
どんな授業を受けるのか(必修科目編)
今回の記事では、私のScientists and Engineersコースの場合という前提で、どんな勉強をするのかご紹介します。実際、私のコースは、必修科目と取得単位数が多いので、その他のプログラムよりも、CS全般を基礎から体系的に学べるコースです。コンピューターサイエンスでどんな勉強をするのか、という観点では、参考になると思います。
まずは、必修科目(Requirements)を紹介します。
<プログラミング必修(Preparatory Programming Requirements>
授業名:Introduction to Programming Systems and Design
→C Sバックグラウンドがない人向けに、修士課程レベルまでに必要なプログラミングスキルを教える授業。使用する言語は、Javaと C++。条件分岐や繰り返しといった初期レベルのアルゴリズムから、Binary tree algorithmやsortなどデータ構造のアルゴリズム、C++を使ってポインタの概念を学ぶなど、多岐にわたる。毎週プログラミング課題が出される上、学期中に5回のプログラミングプロジェクトの提出課題に取り組み、中間&期末テストもある。
<基礎必修科目Foundational Requirements>
授業名1:Introduction to Computer Networks (or Computer Networks Organization)
→この授業は、電気工学科(Electrical Engineering)で提供されている科目だが、私のコースでは必修となっている。ネットワーク技術(TCP/IPなどのプロトコルやデータパケットの処理速度計算など)、インターネットの仕組みを広く学び、ソケットプログラミングというサーバー&クライアント間でデータのやり取りをするプログラミング課題に取り組む。
授業名2:Operation System
→この授業は、私がこれから取り組む科目なので、詳細の説明は省きますが、P Cなどのハードウェアと各アプリケーションの橋渡しをするオペレーションシステム(OS)の仕組みを学び、カーネルプログラミングという、OS機能を作るためのプログラミングを学びます。Cを使用言語とし、プログラミング課題の量が多いので、USCのCSの中でも最もハードな科目の1つと言われています。
<その他必修科目 Core Requirements>
授業名:Analysis of Algorithm
→この授業は、他のC Sプログラムでも唯一の必修科目となっています。様々なコンピューターサイエンスの分野で用いられるアルゴリズム(プログラムの構造のようなもの)を理論ベースで習得していきます。私が履修した先生は、プログラミング環境を用いず、紙とペンで学ぶ形式であり、個人的にはとても学びが深いものでした。
どんな授業を受けるのか(選択科目編)
選択科目については、個人の興味のある科目を自由に選択します。2022年秋学期のクラスは、下記U R Lにリストが記載しています。
大まかにこれらを分類すると、下記の6つくらいに分けられると思います。
→数理解析やアルゴリズム解析、確率論、数値シミュレーション、様々なアルゴリズムを利用したプログラミング技法などを学びます。微分積分や確率統計など、様々な数学の理論を用います。
<2:ネットワーク、セキュリティ系>
→コンピューターセキュリティに用いられているアルゴリズムや暗号化技術、システム構造などを学びます。
<3:AI, データサイエンス系>
→データベースの様々な仕組み、機械学習理論や、自然言語処理、ゲームアプリへの応用実装などを学びます。最も流行りの分野です。
<4:Web系>
WEBシステムで使われている様々なプログラミング言語(HTML, JavaScriptなど)を用いて、クライアント側とサーバー側のアプリケーションを構築したりします。また、webの検索エンジンに使われている技法を学んだりもします。
<5:ハードウェア系>
VRやホログラムなどの3Dグラフィックスのアプリケーション作りや、ゲーム作りのプロジェクトを行う授業もあります。
<6:研究プロジェクト系>
様々なC S分野の最新リサーチを紹介する講義や、自身で課題設定して行うDirected Research,そして、修士論文も選択できます。
以上が、カリキュラム概要になります。私は、1の理論数学系と、3のデータサイエンス系を多めに履修しています。従って、微分積分やベクトル・行列などの線形代数や確率統計論など、数学の知識を多く求められ、四苦八苦しながら日々を過ごしています・・・。肌感覚としては、データサイエンス系とWEB系の授業は、人気が高く、大人数の授業になることが多いです。一方で、理論数学系の授業は、敬遠する人が多いのか、少人数授業が多いので、私はあえて履修しています。教授と近い距離感で相談できるのも魅力の1つです。
いかがでしたでしょうか。やはり全体的にコンピューターサイエンスの勉強内容は、数学とプログラミングに尽きると思います。もしCS分野で留学検討されているならば、大学数学の復習を少しやっておくとスムーズかもしれませんね。
それでは!
【CS米国留学、俺みたいになるな】志望校選定
今回は、コンピューターサイエンスの分野でどのように志望校選定をしたのか、振り返ってみたいと思います。
出願当時、ネットで調べても日本人による情報がなかなか見つからず、私も手探りで志望校を選定していました。今後目指される方にとって、少しでも助けになればと思います。※出願時期は、2018年の年末から2019年年始あたりです
出願前の私のスペック
・大学時代は環境化学を専攻、数学やプログラミングは正直苦手
・大学を学部で卒業し就職し、その後プログラミング経験はほぼゼロ
・会社でテクノロジー導入の実証試験などを企画することが数回あった
今思うと、コンピューターサイエンスを修士で学ぶには、“?”なバックグラウンドでした。明らかになめてました。赤ん坊がヨダレを垂らすほどに。いや、ヨダレを垂らしていたのかもしれません。後に入学してから気づくのです。これは大変なところに来てしまった・・と。
で、何を学びたいのか
赤ん坊のように舐めきった私も、志願動機書を書く必要があります。当たり前の話ですが、「自分が何を学びたいのか」は、自分で考えるしかありません。
私自身、これまでの会社員人生の中で、運輸現場の企画、改善の仕事に従事し、新たなテクノロジーの検証なども行っていたため、それなりに「テクノロジーとヒトの境界線をどのようにデザインするべきか?悩んでいるぞ、俺」というフリをしていました。いわゆる悩みプレイというやつです。
そんなとき、ネットで調べていたら、「どうやらコンピューターサイエンスにはHCIという、それっぽい領域がある。HCI、なんかかっこいい!」と勘違いし、自分はその分野を勉強するんだと自己暗示をするようになりました。(この頃から、やたらと独り言で“H C I”と言い出します)
勝手に売り込み作戦
次に、志望校選定へと移るわけですが、その前に、さまざまな大学の研究室H Pをチェックし、HCI領域の研究室があったら、教授に直アポして、レジュメを添付したメールを送るという「飛び込み営業」を敢行していました。
これは、アメリカの大学院が、コネクションを重視していると聞いていたからです。過去の研究実績がない私は、ゼロからコネクションを作るしかありません。しかし、当然ですが、送ったメールの99%は無視されました。もう気分は、売れないミュージシャンです。「アメリカというのは厳しいな、アメリカンドリームの厳しさに打ちのめされているな、俺」という状態です。いわゆる下積みプレイというやつですね。この状態になれば、メールを無視されるほど、ハイになります。
そんな中、丁寧に返信を下さった教授の方も何人かいらっしゃいました。ある教授の返信には、「うちのコースは、PhD志願者向けだから、君は合わないかもね」と書かれており、案の定、その大学は後に不合格となりました。出願する前にお祈りされていたパターンです。厳しいなあ、アメリカンドリームは!
結果的に、飛び込み営業の成果はありませんでしたが、自分のバックグラウンドでは、険しい道のりになりそうだ、という感触を得ることができました。(気づくのが遅いですね)
ちなみに、返信をくれた教授の言う通り、多くの研究室は、研究内容で貢献できる学生を求めています。私は出願した学校を含め、数十校の各研究室HPをチェックしましたが、そのほとんどの募集条件が、「学部時代の優秀な研究実績」であり、Masterは、PhDへのステップという印象でした。もし、学部時代や入社後に関連分野を研究しているならばPhDコースを検討するのもアリだと思います。
志願プログラムの選定
飛び込み営業で感じた、アメリカンドリームの厳しさを踏まえて、私は作戦を少し変更しました。志願動機であるHCI領域のプログラム受験に加えて、CS初心者向けのプログラムを受験することにしたのです。
後に私が進学する南カリフォルニア大学のプログラムもこれにあたり、他の分野のscienceやengineeringを学んだ人向けのMasterプログラムです。その他、Information Technologyというというプログラム名で、このような趣旨を持ったプログラムもあります。最近は、MBAとCSを双方学ぶプログラムも増えているようですね。
以下は、私が実際に受験した各大学のCSプログラムを列挙したものです。
<受験校リスト>
○記念受験: Stanford University (Computer Science) 不合格
一度受けてみたかった。悔いはない。
○記念受験: Harvard University (Computer Science) 不合格
一度受けてみたかった。そもそも若干名しか入れないとHPで明記されている。H Pが少しダサい。HCI分野の教授が1人だけいたので、連絡したが無視された。
○University of California Berkeley ( Computer Science) 不合格
HCI分野で優れた研究者が多く、第一志望だった。直アポを頑張ったが、返信は来ず。HPを見た印象では、CS分野をひたすら研究する人を求めているようだった。各研究室を見ると、分野はバラエティに富んでいる。アルゴリズム系や、AI、メディアアーツ、Robotics系にも強い。
○University of Washington ( Human Center Design) 不合格
UWは、CS分野においては全米でも超名門。UWはHCI分野専門のHuman Center Designというプログラムがあり、個人的に行きたかった学校。ただしこのプログラムも倍率が高い模様。TOEFLの足切りスコアは107とHPに明記されている。
○University of Southern California ( Computer Science, for scientist and engineers) 合格!
CSの中でも様々なプログラムが用意されている。私が進学するのは、Computer ScienceのScientists and Engineersというコース。いわゆる理系の他分野を学んだ学生向けのもの。このコース以外にも、Data Science系やRobotics系などMasterだけでも10種類程度あった。USCは、CSに限らず様々な学部でアジア系の学生を多く受け入れているようです。
○University of Pennsylvania ( Computer and Information Technology) 不合格
USCと同様、このコースは、他分野を学んだ学生向けの初心者向けプログラム。H Pが古い。ご縁なく不合格。
○Carnegie Mellon University ( Information systems ) 不合格
CSでは全米トップの大学だが、私が受けたのは純粋なCSではなく、情報システム分野。AGOSデータを見たら私よりスコアの低い人でもこのコースは受かっていたので、滑り止めと考えて受けたが、不合格だった。HCI系をやりたいというエッセイとマッチしなかったと思われる。ちなみにCarnegie MellonにはHCI専門の大学院があるが、1年制プログラムしかなかったので見送った。1年だけで良いと割り切れば、ここのHCI系を受けてみても良いと思う。唯一、出願後にビデオインタビューがあった。
○University of California Irvine ( Informatics) 不合格
UC Irvineは、HCI系の研究が盛んな大学である。ここもHCI専門のコースがあったが、1年制だったので避けた。(どうせなら2年がっつり勉強したかった)InformaticsにおいてもHCIの先生はいたので、アポを取ったところ返信をくださり、InformaticsはPhD志願者向けのプログラムだと言われた。
○University of California Davis ( Computer Science) 合格!
UC Davisは、HCI系の先生も複数いた。直アポに対しても丁寧に返信をくれた。本流のComputer Science コースを受験したが、自分のバックグラウンドでも合格通知をくれたので、個人的には好印象。中国系の教授が多い。日本のいろんな大学が語学留学に派遣している。理由は、デービスの治安は非常に良く、気候が良いからだろう。農学部や生物学が非常に盛んで、野菜が美味しいらしい。学生はみんな自転車で移動する。日本の筑波大学みたいなイメージ。USCのcomputer scienceに行っていた私の日本人の友人も、UC DavisとUSCだけ合格通知をもらったと言っていたので、日本人との相性が良いのかもしれない。
○その他
受験はしていませんが、調査していたところの一部は下記にまとめています。
・MIT : CSはアルゴリズム系や数学系に偏っていた印象。HPがわかりづらい。HCI系は、メディアラボになるが、アート系が多く、自分の関心領域とは異なる印象だった。英語テストがIELTSだったので対象から除外した。
・Chicago :MBAとCSを混合したプログラムがある。MBAに興味がなかったので除外した。CS学部では、システム系が多かったが、HCI系が少ないため除外した。
・UCLA :ここもHCI系の研究室がなかったため除外した。
・Columbia :computer science graphics & user interfacesという学部があり、HCI系研究は充実していたが、学部時代に一定量のcomputer science科目を履修している条件があったため、除外した。
・Yale :そもそもCS全体で若干名。10名程度とHPに書いてあった。
・University of California San Diego :HCI系研究が充実しており、行きたかったが、学部時代にcomputer scienceを学んでいることが条件だったため断念した。
・Georgia tech :CSの名門。トップスクールなのに出願期限が2月と遅いのも特徴。ここもHCI系が充実していたが、CS分野の経験がないとダメという条件があったので断念した。
まとめ
結果的に2校から合格通知をいただくことができ、私はU S Cに進学することになりました。上記の他にも受験したような気がしますが、夢だったのかもしれません。2校以外は全て不合格だったので、良い具合にアメリカンドリームの厳しさを浴びる経験となりました。
私が今コンピューターサイエンスに所属していて、聞いている噂によると、CSの領域は年々倍率が増加しているようです。ちなみにUSCの私の学部は、学生の8割がインド&中国人です。アメリカンドリームを思い描いて渡米したのに、学内は、シルクロードの光景だったのです。アメリカってのは、恐ろしい国ですね。入学後の様子は、また別の記事にてご紹介しようと思います。
ではでは!
【海外留学】TOEFL対策など(特に社会人向け)
今回は、海外留学するにあたり必要な準備を紹介します。
Computer science云々は別として、そもそも海外留学に必要な一般的な準備は、TOEFL/GRE or GMATなどのテスト、レジュメ&エッセイ(志願動機書のようなもの)、推薦状の準備、志望校選定です。
(※志望校選定については、長くなるので別のエントリーで紹介します)
TOEFL対策
<TOEFLの試験性質:時間との闘い>
帰国子女を除く、多くの日本人志願者にとって、最も苦戦するのがTOEFL対策です。特に私のように昼間、社会人として働きながら準備する人にとっては、いかに勉強時間を確保するかが重要となります。
私は、平日は毎日2〜3時間、休日は7〜8時間程度は英語学習に時間を割きました。そして、これを約1年半くらい続けました。個人的な印象ですが、TOEFLは総合的な英語力を測る試験ではなく、どれだけTOEFLに慣れたかを測る試験です。従って、とにかくTOEFL用に体を慣らす必要があり、結果的に多くの時間を必要とするのだと思います。
また、TOEFLは、Reading、Listening、Speaking、Writingの4つのパートに分かれ、トータル約4時間という試験です。パート毎に制限時間があり、時間内に大量の問題や文章を処理することが求められます。長い時間に渡って、集中力を保つという英語的なメンタル&フィジカルも必要です。日頃の練習だけでなく、試験においても時間との闘いと言えます。
<私のスコア変遷例と総論>
参考までに私の留学準備全般のスケジュールとTOEFLスコア変遷を掲載しておきます。
2017.4 TOEFL初受験 ( 60点 R14 L15 S14 W18 )
2017.5 Andy勉強会参加
2017.12 TOEFL (79点 R23 L18 S18 W20)
2018.4 TOEFL (88点 R24 L22 S20 W22) この頃からMicheal先生の添削受講開始
2018.7 TOEFL (94点 R25 L23 S22 W24 )
2018.8 TOEFL (93点 R26 L25 S19 W23 ) 一旦TOEFL諦め、GRE/Essay準備開始
2018.9 GRE 初受験( V 141 Q158 W3.0 )
2018.9 江戸義塾でカウンセリング、ざっくりResume & Essay概要作成
同時並行で推薦状依頼
2018.10.7 GRE ( V138 Q155 W3.0 )
並行して出願プログラム調査と志願研究室への直アポ活動
2018.10 TOEFL (85点 R25 L19 S20 W21 ) →伸び悩み凹む。。。
2018.11 TOEFL (100点 R28 L29 S19 W24 ) →出願スコア
2018.11 GRE (V145 Q 159 W3.0 )
2018.12 GRE (V141 Q 163 W3.5 )
2018.12 各校出願手続き〜
TOEFL勉強開始前の私は、TOEIC最高点が800の純ジャパです。大学卒業時はTOEIC600程度でしたが、その後、しばらく働きながら夜間の早稲田大学ビジネススクールに通ったことがきっかけで英語を勉強するようになりました。(余談ですが、早稲田大学ビジネススクールに通ったことは、プライベート&キャリアの観点で非常に有益だと感じたので、後日別エントリーにてご紹介します)
仕事は国内事業なので、英語を使う習慣はありませんでした。海外旅行も2〜3回しか行ったことがありません。
そのような純ジャパのTOEFL対策総論として、結論から言うと、まずはTOEFLでスコア60〜70程度を取れるまで、「TOEFLテスト英単語3800」とWeb TOEFLの受講をし、60〜70のスコアを取れたら、すぐにAndy勉強会に参加して、その後ひたすら勉強する。これが私&周囲の留学準備の方が実践している対策です。時間のない社会人の方は、まずは上記方針で進められると良いと思います。以下はその詳細です。
<スコア60までの対策>
推奨教材:英単語3800(旺文社)
海外留学準備の際、参考書籍全般に言えることですが、そもそも日本語書籍が少ないです。おそらく、日本から海外留学する人は限られた人数なので、出版社側も採算が取れないからだと思います。従って、基本的には英語書籍か、中国版のオンライン教材を使うことが多いです。
しかし、そんなTOEFL参考書の中でも、唯一、英単語3800は評価の高い日本語参考書です。私が知る限り、ほとんどの留学志望者はこの本を購入しています。本の構成は、語彙の難易度に応じてRANK1-4まで分かれています。まずは、Rank3までを確実に暗記してください。これでスコア100前後の語彙力が培われると言われています。Rank4は、余裕があったらざっと読み込む程度で良いと思います。
おすすめ教材:Web TOEFL(現在はトフレと言うようです)
必須というわけではありませんが、リーディングやリスニングに苦手意識がある方は、やってみても良いと思います。私は、スコアが80〜90くらいで伸び悩んでいた時に、このWeb TOEFLのリスニングとリーディングを履修して、ブレークスルーした感じがあります。内容は初心者向けですが、基本的な読み方や英語の聞き方を丁寧に教えてくれます。またTOEFL試験のクセも教えてくれるので、勉強の初期段階で取り組むと効果的だと思います。私がもし、もう一度TOEFL対策をするならば、Web TOEFLを早い段階で消化することを選びます。
<スコア60〜70になったら:Andy勉強会>
社会人で留学準備する人たちの界隈では、非常に有名なAndy勉強会です。
私も早々に、この勉強会へ足を運び、大量の教材と練習方法を教えてもらい、TOEFL100をマークすることができました。英語には様々な勉強法がありますが、時間のない社会人が効率的にTOEFL高得点をマークするという観点では、ある程度完成された方法だと思います。
勉強会は1日完結型で約7万円と高額ですが、それに十分見合うと感じるほど、大量の教材と、その学習方法をレクチャーしてくれます。しかし、勉強会に参加したからといってすぐにスコアが上がるわけではありません。(Andy先生もそうおっしゃっていました)もらった教材をもとに、教えてもらった勉強方法でコツコツ演習を積むことが、結局一番の近道だと思います。
<TOEFL対策各論>
Andy勉強会に参加することでもらえるTPO(中国語版のTOEFL練習キットのようなもの)の演習を中心に、コツコツ勉強することが基本戦略となります。以下は、私がセクション毎に実践した勉強内容です。
・Reading
英単語3800のRANK3を確実に暗記し、TPO演習(34回)と、Web TOEFLを受講。日本人はReadingで点を稼ぐことが高得点のためには必須。
・Listening
改善まで非常に長い時間がかかる。TOEFLは、リスニング力がないとWritingやSpeakingでも得点を稼ぎづらい試験となっている。(WritingとSpeakingの問題は、まずリスニングでお題を聞き取るところからスタートするため) TPO34回分を2周演習してもリスニングセクションが20点を超えなかったため、Web TOEFLを途中で履修。そこで本当の意味で単語1つ1つを意識して聞き取ることの大切さを知る。演習で聞き取れなかった単語1つ1つを聞き取れるまで、徹底的に聴き続けることが大切。
・Speaking
スピーキングは、そもそも日本人は30点満点中23点が限界だと言われている。従って、スピーキングの練習にそこまでエネルギーを注がない方が効率的。私はTOEFL勉強開始前から、レアジョブを定期的に履修していたので、たまにレアジョブをやった程度。
・Writing
これもAndy勉強会で教えてもらえるが、Micheal先生の添削を20回ほど受けた。また、Micheal先生の指摘により、自分は文法の補強が必要と判明したため、Micheal先生おすすめの「English Grammar in USE」にて演習も実施。
<TOEFL対策まとめ>
上記の練習によって、常態的にスコア90台中盤をマークできるようになると、問題相性の良い時にブレークスルーして100に届くことがあります。TOEFLの得点は、運や相性の要素も強いです。得点結果に一喜一憂せず、コツコツ力を蓄えて頑張ってください。
GRE対策
諸説ありますが、留学生のapplicationプロセスにおいて、GREはそれほど大学側から重視されていない印象があります。(多くの経験者からそう聞きました)なので、私はそれほど対策に時間をかけませんでした。
というのも、GREの英語は難しすぎて、対策しようがないのが正直なところなのです。(GREはネイティブの受験生が解く現代文や英作文という試験なのです)
GREの公式問題集を購入して、試験の形式に慣れる程度で十分だと思います。私は、MagooshというオンラインでGREの練習ができるサイトに登録して、問題演習を積みました。
レジュメ&エッセイ執筆
海外の大学出願において、レジュメとエッセイはセットで必ず求められます。レジュメは、これまでの自分の学歴や職歴を簡単にまとめたもの。エッセイは、なぜその大学やコースを履修したいのか、動機を説明する資料です。一見すると簡単に書けそうなものです。なぜなら自分について書けば良いだけなのですから。
しかし、海外の大学教員から見て「この人は、うちの大学に欲しい」と言われる内容である必要があります。つまり、海外の大学が、どのような視点で合格者を選定しているのかを意識して書く必要があるのです。また、レジュメに書いてある内容とエッセイの書いてある内容が、重複し過ぎていてもアピール度に欠けます。
普通に日本の学校に通い、日本で働いている社会人にとって、このような視点で自分のキャリアを見つめる機会はなかなかないと思います。そこで、多くの社会人留学志願者は、専門のカウンセラーにお金を払って、レジュメとエッセイの添削を受けています。
日本にも様々な留学カウンセリングサービスがありますが、私が使ったのは、江戸義塾です。
私よりも先に留学した友人に教えてもらいました。
サービスは、標準パック10時間で約28万円。直接会ったのは2回だけで、その後はメールでのやり取りのみです。江戸義塾は、すぐに添削してフィードバックをくれるので助かりました。
江戸義塾は、エッセイを自分自身で考えさせるスタンスで、的確かつ鋭い質問を投げかけてくれて、質問に答えるうちに、エッセイができてくる感じでした。同様の流れでレジュメも作成しました。結局標準パックで、レジュメ、各校向けエッセイ、推薦状のアウトラインと添削まで完了できました。
推薦状の準備
大学にもよりますが、多くの大学は2〜3人が書いた推薦状の提出を求めます。そのうち少なくとも1人はアカデミックな推薦者であることが望ましいと言われています。
私は、理工学部時代の研究室の教授、早稲田MBA時代のゼミの教授、会社の留学経験ある上司の3人にお願いしました。幸運なことに3人とも留学経験があったので、全てご自身で英語執筆してもらうことができました。
進め方としては、レジュメとエッセイの骨子が固まったあと、どんな内容を推薦状に書いてほしいかを箇条書きにまとめて、各推薦者にお願いしました。
ポイントなのは、留学カウンセラーともよく相談して、レジュメ・エッセイと重複しない内容にすることです。推薦状を通してどんな強みをアピールしたいのか自分で整理してから依頼をすることが非常に重要です。
以上がざっと一般的な海外留学準備の内容になります。
次は、具体的なコンピューターサイエンスの出願校選定などについて、書こうと思います。
ではでは!