2023年2月第2週のヘッドライン
2023年2月第2週に,うみのがネットで気になった記事をご紹介します.一週間のまとめとして,週末のお供として,どうぞお付き合いください.
ChatGPT の限界を試してみる
ここ数ヶ月間,ソフトウェア界隈は,猫も杓子も OpenAI が作成したチャットボット ChatGPT の話でもちきりになっています.ChatGPT は,大規模言語モデル(LLM; Large Language Model)である GPT-3.5 をベースにしたチャットボットで,米国司法試験に合格したり,Google における年収2000万円レベルのコーディング面接試験に合格したり,はたまた,MBA の試験に合格したりと,大変な成果を上げています.
一方,ここでは,現段階における ChatGPT の限界について,いくつかのテストを行なっています.
試してみたのは,簡単なクイズ(Pub Quiz)を生成するもの,フォーマットを指定したデータ生成(JSON 形式のデータを生成するもの),計算問題,プログラミングコードの生成など.それぞれ興味深い結果が得られています.
面白いのは計算問題で,次のような会話(和訳のみ示します)が得られているそうです.人間の頭が混乱しそうになってきます.
どうも,ChatGPT くんは,あんまり数学が得意ではないようです.計算機のプログラムなんですけれどね.
他にも,いくつかの実験を通じて,ChatGPT のクセについて検討しています.こうしたクセもいずれ克服して,私たちのいい相棒になってくれるのでしょうか.楽しみですね.
コードレビューの作法
プロのソフト屋さんであれば,現場でコードレビューをすることがよくあると思います.しかし,このコードレビューなかなか円満に実施するのが難しいんですよね.
レビュイであるプログラマにとっては,我が子のような作品にあれこれ注文を付けられるのは,あまり面白いものではありません.一方,レビュアにとっては,自分のプログラミングに対する態度を表明できるいい機会だったりするもので,ついつい一言多くなりがちだったりします.
コードレビューはさまざまな感情がもつれる場なので,円満かつ円滑に行なえるように.工夫する必要があります.
そもそも,コードレビューには権力関係があり,レビュアの方がレビュイよりも強い立場になりがちです.このため,いくらレビュイのことを考えていたとしても,「レビュイ考えさせて気付かせる」といった教師的な態度では,なかなかうまくいきません.
自分の指摘を正当化するために,親方と徒弟のような権力関係を設定する方が都合がよく,実際,うみのが知る現場でも,このようなコードレビューが頻繁に行われていました.もちろん,ほとんどの場合,レビュイをやり込めてやろううといった意図はレビュアになく,むしろ「ていねいに教えてあげている」つもりなのだとは思います.
ここでは,教えるー教わるといった関係ではなく,お互いに学び合う姿勢でコードレビューを行なえば,実りも多くなるのではないか,と提案しています.
うみのもこれまで数限りなくコードレビューをしてきましたが,レビューの工程において,レビュアにはかなり高度なコミュニケーション能力が要求されると感じています.先にも述べた通り,レビューの対象となるプログラムはプログラマの"作品"であり,機微に触れるところだからです.うみのは,プログラムを書く上で苦労した部分などを聞いて,それを取っ掛りにして,一緒に考えるような方式を取っています.アイデアを出し合うようなイメージです.
こればかりは,レビュアも実践しながらレビュー手法を学んでいくしかないとは思うのすが,他の方の考え方を知るの有益なのではないかと思います.本エントリを読んだら,実践に移していきたいところですね.
オープンソースのコンピュータサイエンス講座
GitHub 上で,OSSU (Open Source Science University) が,学部課程相当のコンピュータサイエンス(CS)講座を開いています.すべて無料で,完全な CS 教育を用意しているとのことです.もっとも,大学における CS の学位要件には一般教養など非 CS の科目も含まれていますが,これら非 CS の科目は本カリキュラムに含まれていません.
カリキュラムを見ると,内容は相当ハードで,腰を据えて取り組む必要がありそうです.しかし,このような無料の大学講座がオープンソースのリソースとして公開されていることから,金銭的・時間的な事情で大学に通えない方も,CS の教育を受けられるようになりました.OSSU だけでなく,海外には,このような無料の大学講座が多く設置されているので,事情があって大学に通えない方も,やる気しだいで,CS を独学することも可能になりました.
うみのも,もともとは法学部の出身で,大学に通わず独学で CS を学びました.当時は,教科書を集めたり,講座を申し込んだりと,それなりに費用がかかりましたが,今は,ほとんど無料で学ぶことができるわけですね.うらやましい限りです.受講にあたって学歴の要件もないため,高校数学ができれば,高校生でも中学生でも取り組むことができます.
一方,日本人にとっての難題は,英語かもしれません.しかし,これも近頃は高機能な翻訳サービスがありますし,やはりやる気しだいでどうとでもなりそうな気もします.
CS 教育をめぐる世界の状況は,目に見えて発展しています.およそどんな人でも,高品質な教育を受けられるようになってきています.このようなサービスを通じて,どんどん自分の可能性を広げられるといいですね.
ハードウェアに潜むトロイの木馬
トロイの木馬攻撃 (Trojan horse attack) は,古くからあるサイバー攻撃の手法です.正規のプログラムやデータに見せかけたマルウェアをターゲットに送りつけておき,事情を知らないユーザがそれを起動したり使ったりすると,マルウェアが発動するタイプの攻撃です.
従来,トロイの木馬攻撃は,ソフトウェアによるセキュリティ攻撃であることが常識でした.しかし近年,もっと低層のハードウェアレベルで仕込まれたトロイの木馬が広がっているそうです.
ここではこの,ハードウェアレベルで仕込まれたトロイの木馬について,その仕組みを解説しています.解析にあたっては,ダイを剥き出しにし,マイクロスコープでハードウェアデバッグをしているわけですが,うみのは読んでいて頭がクラクラしてきました.これでトロイの木馬を見つけることができるのか.ほとんど不可能なのではないか,と思えるほどです.
ハードウェアレベルの話は,正直,うみのも専門外なので,全て読み切れているわけではないのですが,いずれ問題になりそうな話ではあるので,熟読したいと思います.
リキッドニューラルネットワークによるより柔軟な機械学習
従来,深層学習も含むニューラルネットワークには,決まったお約束がありました.それは,各ニューロンが重み変数を介して線形関数でつながっている,という前提です.
例えば,シナプスの発火に使われる活性化関数には,シグモイド関数のような線形な関数が使われています.ニューラルネットワークのモデルは,これまで数多く提案されてきましたが,この基本的な構造は大きく変わっていません.
一方ここでは,MIT の Ramin Hasani さんと Mathias Lechner が取り組んでいる,異なるタイプのニューラルネットワークが紹介されています.リキッドニューラルネットワークと呼ばれるこのニューラルネットワークは,線虫の神経構造をヒントにして提案されたものだそうで,高い適応能力があるとのことです.
リキッドニューラルネットワークの大きな特徴は,シナプスどうしが非線形な関数でつながっていることで,活性化の有無が,確率的に変化するのだそうです.従来の活性化関数は,シグモイド関数のように入力の大きさに比例して活性化の有無が左右されていましたが,このネットワークでは,同じ入力でも次段への出力が高くなったり低くなったりするのだそうです.
もっとも,この構造が提案されたのは,2006年と比較的古いもので,当時は大きな課題がありました.それは,学習時にかかる計算量が大きすぎることです.シグモイド関数などは,簡単に(解析的に)微分を求めることができます.しかし,このネットワークはシナプスどうしが非線形につながっているため,学習時に近似解を求める必要があったのです.近似解は,通常,繰り返し計算をしながら解に近付いていくようなアルゴリズムになるので,本質的にソルバは遅くなります.
このような課題に対して,近年新たな成果が出ました.すなわち,この解を閉じた形で求められる解を発見したのだそうで,これにより,リキッドニューラルネットワークの基本的なシステムにブレイクスルーが起きました.閉形式の解(解析解)というのは,つまるところ,パラメタを与えて決まった計算をすれば,値をそのまま計算することができるタイプの解です.中学生の時に教わった二次方程式の解などは,閉形式で解ける解(解析解)ですね.これにより,繰り返し計算で近似解を求める必要がなくなり,学習時の計算がぐっと速くなったのだそうです.
もしかしたら,現在のニューラルネットワーク関連製品が大きく刷新される日も遠くないかもしれません.
今週はこれでおしまい
さて,今週のお話はこれでおしまいです.今週もおつきあいいただき,ありがとうございました.
今週,関東圏は雪が降るなど,まだまだ寒い日が続いています.みなさま,体に気をつけて春を待つことにしましょう.
うみのとは,また来週お会いしましょう.それではさようなら.