CS50 Tideman

Harvard XのCS50 2021 Week3 のプロブレムであるTidemanがようやく終わった。

CS50は無料のオンライン講座で、Harvard大学が実施しているCS50という講義をedXというプラットフォームで無料配信している。CSはComputer Science の頭文字をとったものらしい。50というのは講座番号らしいのだけれど、なぜ50なのかは調べてもよくわからなかった。CS50はIntroduction to Computer Scienceという正式名称で、Introductionというのが信じられないぐらい難しい(けど楽しい。)オンライン講義でなければ、つまりハーバード大学に入学していればCS51(Introduction to Computer Science 2)とかCS60というのも履修できるような情報も見つけたけど、ちょっと情報がふるいのでCS51はともかくCS60がまだ存在するのかがわからなかったし、入学しなければいけないのはハードルがかなり高いなあ。

CS50は無料というのが信じられないほど素晴らしい内容で、2時間半程度の講義と講義で扱った内容をもう少し詳しく説明するショートビデオ(Short)、練習問題(Lab)と課題(Problem)で成り立っている。講義の内容はまとまってサイトに上がっているし、講師であるDavidが話した内容がすべて文字に起こされていて、講義の英語がよくわからなかったり、講義のあの部分だけもう一度確認したいといった時に非常に便利。講義も工夫されていて、お金もかかっている様子。なんでも毎年講義内容を更新して講義も撮り直ししているらしい。もともとはハーバード大学で実際に行われている講義を録画したものなので、当然と言えば当然だけど、内容が変わっていくのも素晴らしいと思う。

12週間分の講義を自分のペースで進めていけるのだが、最初はScratchを使ってプログラミングはこんなものですよという紹介から始まって、C言語、Python, HTML+CS+Javascriptを順番にやっていく。盛りだくさんのボリューム。講義を見た後、練習問題や課題をこなして身に着けていく。

練習問題や課題はCS50 IDEというクラウド上のサービスを使って解いていくのだけれど、このCS50 IDEがとてもよくてプログラムの勉強時にありがちな開発環境を整えるだけで時間がかかってしまう、もしくは開発環境構築に挫折してしまうといった事態を避けられる。それにCS50 IDEを使ってエラーのチェックや、課題の提出、さらには採点までされるという、なぜこれが無料で使用できるのかと不思議に思うレベル。何十時間も触っていくことになるので、画面のデザインがシンプルでクールなのもいい。

ターミナルで操作したときの反応が若干遅い気がするのはサーバーが地球の裏側(アメリカ)にあるせいかな。

ここからCS50について確認できます。いつまでリンクが生きているかわからないので、「CS50 Harvard」とかで調べた方がいいかもしれない。

CS50(https://pll.harvard.edu/course/cs50-introduction-computer-science?delta=0

さて、Tidemanについて。TidemanはWeek 3(Week 0から始まるから4週目)の課題。同じくWeek 3のRunoffと同様、選挙時の投票システムをつくる課題なのだけれど難易度が桁違いだった。自分はRunoffは3時間ぐらいで終わったが、Tidemanは1日3時間から4時間を5日間かかった。土曜日に始めて水曜日までの5日間。これは作業時間で、起きている間は通勤しているときも、ご飯を食べているときも、お風呂に入っている間も、仕事の会議中でも、とりあえず時間があれば考え続けての5日間です。本当に本当に大変だった。何とか終わってホッとしている。

ネットで「Tideman hard」とかを調べると、いろいろな掲示板で苦しんでいる人の書き込みを見つけられる。お互いに励ましあっていたり、問題が難しすぎると文句を言う人がいたりと反応は様々。ハーバード大学のオンラインショップで「I finished Tideman」というTシャツを売っているぐらい、難しいと有名なある意味名物課題なんだろう。

解き方としては、6個のプログラムを順番に作成していくもので、一つ一つが結構複雑で時間がかかる。それでも一つを除いてはまあ何とかなる。問題は「再帰(recursion)」を使うことにある「lock_pairs」というプログラム。再帰という概念自体が難しいし、選挙システムもややこしい。ここでかなり時間をつかった。

自分はここの部分を考えるのにExcelでマトリックス表を作って、場合分けをしながら、別のファイルにこのプログラムだけを抜き出して、それが想定通りに動くかを1行1行確認していった。再帰の概念を理解するのに「Merge sort」を実装してみたりもした。急がば回れで、こういったちょっと余計な手間をかけるのがよかったのだろうと思う。あと、debug50の使い方を習熟してからこの箇所に臨むと結果的に時間節約になるかな。

lock_pairsをどう考えればいいかはネタバレになるので書かないけれど、あらかじめ準備されているlockedという二次元配列を使うのがポイントになるかな。Candidateが3人とか4人の場合を想定して、Excelに表を作ってコードに合わせて記入をしていくことで自分のコードをよく理解できると思う。

check50を使ってチェックをかけてしまうのもよいと思う。プログラム単体でチェックしてくれるようなので、6つのプログラムそれぞれをつくり終わる都度チェックをかけていけば確実に進んでいるのを実感できるし、精神的な支えになるはず。

Tidemanのアルゴリズム自体がよくわからなければ「シュルツ方式」で検索をかけるとWikipediaで同じような投票方式の説明がある。このサイトは課題を終えた後に見たのであまり詳しく確認していないけど、なんとなくなじみのある矢印とか、「コンドルセ方式」という言葉があるので、参考になるんじゃないだろうか。

混乱をしたのはStrength of Victoryの考え方で、サイトにある説明とBrianの説明、check50の表示が少し違う気がする。サイトにある説明は明確なのだけど、Brianとcheck50ではMargin
of strengthという言葉が使われていて、これだと2つの候補者の得票数の差を計算することになるのだけど、結果がかわってくるんじゃないだろうか。

あと、lock_pairsで票の順番によって結果が変わってくることがある気がする。英語のサイトでこれはTidemanアルゴリズムのバグのようなものなので気にしなくていいとあったけど、少しもやもやする。
細かいところではWalkthroughビデオのBrianはティーダマンと言っているが、英語の発音の法則からはタイドマンが本来は近いのではないかという疑問はある。

気になるところはありつつもようやく終わってよかった。5日間の苦労が報われた。記念に「I finished Tideman」Tシャツを買ってもいいかなと思うぐらいには頑張ったと思う。

ちなみにハーバード大学のオンラインショップにはCS50の特設ページがあってDDB(Duck DeBugger)が売っている。講義の中でDavidの前にずっと置いてあるやつ。これは欲しいなあ。

全ての項目にパス!記念スクショ

EUのAI規制

2021年4月21日にEUで、AIの活用に関する規制案が提案されたようです。
まだ決定ではないようで、競争力を失うとして産業界からは反発があるようですが、逆にこのことでEUがAIの主導権をとれるという意見もあるようです。
個人情報保護(GDPR)の際も同様な動きだったので、大きな流れは変わらなそうです。

規制では、AIを4つの区分に分けて、一番高いリスクは「許容できないリスク」として禁止されます。これに該当するのは、AIを使って人の潜在意識にはたらきかけるい技術、行動を監視して信用力を格付けしたり、格付けによって行動を制約する技術、犯罪者や容疑者を監視するための監視カメラによる(生体認証)などです。どれも中国で活発に使われている分野です。

次の区分は「ハイリスク」カテゴリーとして、

  1. 人の生態認証による識別とカテゴリー化。
    (例)人を遠隔で生態認証するAIシステム。
  2. 重要インフラの管理・運用
    (例)道路や交通システム、水、ガス、暖房、電気といったインフラの安全な管理・運営・供給のためのAIシステム。
    3.教育および職業訓練
    (例)だれが教育や職業訓練を受けることができるかを決めるAIシステムや、 教育・職業訓練機関の学生を評価するAIシステム、入学試験の中で受験者の評価などに使われるAIシステムなど
  3. 雇用、労働者管理
    (例)採用評価に使われるAIシステム、昇格・解雇の決定や、人事異動の決定に使用されるAIシステム、成果やその人の監視・評価に使用するAIシステム
  4. 重要な民間・公共サービスを使わせて良いかを判断するAIシステム。
    (例)緊急医療を受けたいとき、災害に罹災したときに手当や救助の優先順位を決定するAIシステム

人事労務関連分野で関係するのは教育、職業訓練、雇用・労働管理ですね。
これらのAIが規制されるということは
・企業が採用の際に応募者情報をAIで分析する
・評価や昇進をAIに判断させる
・クビにする人をAIが決める
・学校の入学試験にAIを取り入れる
といった、人事のAIの先進事例として取り上げられることの多くが規制されます。こういったサービスを売り出している多くの企業は頭をかけてしまうでしょう。
EUでの動きですので、直接日本に影響のあるものではありませんが、いずれ日本でも同じ流れになる可能性もあります。日本で法規制されなくても、EUで規制されてしまうとあまりよいイメージは持たれなくなります。

もしくは逆転の発想で、日本では結局規制をせず、Aをが野放しにすることで、AI技術が発展するかもしれません。そうなれば日本にとってチャンスが見えます。