見出し画像

技育展2022優秀賞を受賞しました。

サポーターズが主催する大規模な学生向け技術コンテスト「技育展」今年も参加しました。参加記としてこの記事を公開します。

技育展、何が良いって、今回であれば15個ものテーマがあって、それぞれのテーマに沿って学生エンジニアが熱く自分の作品を語るんです。テーマは与えられつつも、何を作るかは自分で決める。このちょうどよい設定が最高に好きです。

実は技育展は2020年に始まったイベントで、私は2020、2021と「無駄開発」部門を連覇しています。そうです。この「無駄開発」というテーマが初回である2020年からずっと続いているのも、個人的に好きな理由の一つです。なんて言ったって、個人的には無駄なものを作るほど楽しいことなんてありませんから!

さらに、今回であれば各テーマでの最優秀賞に20万円、さらに優秀賞3作品にそれぞれ5万円の賞金が出ます。これは大きいです。

2020年、2021年の参加記は以下に公開しています。


何を作ったか

「オセロロボット Isevot」を作りました。ちなみに読み方は「あいすゔぉっと」です。

これは技育展に限らず大事だと思っていることですが、自分の作品には必ずどこかのタイミングで名前をつけると良いと思っています。インターネットの海に作品を流したときに見つけやすくなりますし、何より愛着が湧きます。

技育展などのコンテストに関して言えば、作品名が一覧のような形で公開されやすいので、作品の名前だけではその作品がどのようなものかわからない可能性があります。そのため、私は今回「オセロロボット Isevot」という名前にしました。こうすると名前だけである程度どんなものかわかります。

昨年はオセロAIネタで「レトロオセロAI」を作ったので、2年連続でオセロAIが絡む話になってしまいました。まあ1年半くらいオセロAIを作っているのでしょうがない…


応募

今回の技育展は9月にプレゼンと結果発表があって、私が申し込みをしたのが7月でした。申し込みの後に書類選考があって、1テーマにつき12作品が選ばれます。

とりあえず、去年とは違う作品とは言え、オセロAIで被ってしまっているので多少の差別化を考えました。去年の内容は冒頭に貼った去年の記事を見ていただくのが早いですが、大まかなストーリーは「オセロAIコンテスト世界4位が、なぜか気を狂わせて8bitマイコンという超低スペックな環境でオセロAIを動かしてみたら、作者より強くなった」みたいなものでした。

今回は、もう私はすでにオセロAIコンテストで世界1位となっていましたし、さらにコンテストの制約を取っ払った状態でも世界最強と言えるオセロAIを作っていました。ということで、このオセロAIの、とにかく強いという特徴をうまく活用しようと考えました。

技育展や様々な展示会に出すことを念頭に、6月くらいからオセロをロボットに打たせる試みをやっていました。これが結局Isevotという作品になるのですが、実はこのロボットには様々な思いや考えを込めました。わかりやすく言えば、技術というよりは、技術を使った芸術に近いようなことをしてみた作品です。しかし、ここは技育展。ここではある意味「面白さ」を優先に語ることにしました。ちなみに芸術っぽい側面が知りたい方はこちらの記事をご覧ください。

まずはテーマを選びました。まあもう無駄開発を2連覇していましたし、オセロロボットという存在自体が無駄感満載です。3秒くらいの思考で無駄開発に決めました。

さて、では今回はどこに「無駄さ」を見出しましょうか。色々なところに見出すことはできそうですが、作者として一番推したい無駄さを1つ決めるとストーリーが引き締まる気がしたので、1つに決めました。それは、「ロボット同士が全自動で行うオセロを、人間はただ見るだけである」というところです。

ということで、応募書類に書いた作品概要は以下のものです。

2021年より開発している世界最強の自作オセロAIが自作ロボットとなり、現実の盤面で戦いを繰り広げる。ロボットを2台用意し、ロボット同士の対戦を見学することができる。人間はただロボット同士が対戦する様子を見学するだけである。ロボット1台でも自己対戦はできるが、2台用意することでロボット同士の真剣勝負をより鮮明に観測できる。人間とロボットの対局もできるが、主な機能ではない。

さらに、応募書類には作品概要とは別に、作品のアピールポイントがあります。

アピールポイントには少し芸術っぽい背景をチラつかせました。そして、さすがにそれだけでは技術界隈で理解されないと思ったので、ロボットに搭載したオセロAIと、そのオセロAIを使った自作のオセロ研究ソフト、さらにオセロAIについて書いた記事について触れました。アピールポイントの原文は以下です。

もはやAIによるオセロと人間によるオセロは全く別物であると思うので、ロボットvsロボットというかつてない戦いを見学したいと思い、製作した。AIもロボットもフルスクラッチである。ロボットに搭載した自作オセロAIはオープンソースのフリーソフトとして公開しており、550ダウンロードを突破している。また、私はオセロAIに関する記事を書き、オセロAI界隈の発展に尽力している。

ちなみに今調べたら自作ソフトのダウンロード数は930を突破していました。嬉しい限りです。ソフト自体はこちらで公開しています。

さらにさらに、技術に関するコンテストですから、使用技術について書く欄ももちろんあります。これについては見る人が見ることを想定しているので、容赦なく書きました。搭載しているオセロAIの技術的な凄さ、そしてロボットアームをわざわざ採用したこだわりについて書きました。

AIはC++で書き、ビットボード、SIMD、CPUによる並列化などの技術を盛り込んだゲーム木探索(Negascout法)を行っている。フルスクラッチのため、限界まで高速化できた。また、評価関数には既存手法に独自の研究中の手法を取り入れて精度を向上させた。ロボットはわざわざロボットアームという形にすることでオセロを「打つ」動作を見やすくした。

そして最後に、この作品に関して追加でアピールできる欄があったので、コンテストでの成績や学会での発表などを書きました。

搭載AIはCodinGame Othelloという世界的オセロAIコンテストで世界1位になったAIを改良したものである。搭載AIと同じものを組み込んだオセロソフトはオセロプレイヤーの間でオセロの研究目的で主に使われている。搭載AIの評価関数に関する研究では第48回ゲーム情報学研究発表会で発表した。


作品製作

実は7月の応募時点で、2台作る予定のロボットのうち1台しか完成していない状況でした。別件で9月の頭はとにかく忙しくなることがわかっていたので、なんとしても8月中に全てを完成させるという強い意志で製作しました。さらに言えば、他にももう一つ作品を8月中に作る必要が出てきたりして、とにかく死にものぐるいでした(ちなみにもう一つの作品は3日で作りました)。

一応自分の作業スピードと技術的な難しさ・詰まりやすさを見積もって作業日程を組んだので、数日の余裕を持って8月後半に作品を作り終わりました。9月頭に作業はできないことがわかっていたので、余った数日を使って作品の写真や動画を撮影し、隙間時間を使って冒頭に貼ったYouTubeの動画を作りました。

これは技育展に限らず大事なことですが、作品の写真と動画は必ず完成直後に撮るべきだと思っています。動画や写真を撮るのは、特に大きめのハードウェア作品であればそこそこの時間がかかります。早い段階でやっておけば、後で写真が必要になって作品棚から取り出してセッティングして撮るという行為をせずに済みます。さらに言えば、ハードウェア作品は往々にして壊れたり、部品を取るのに使われたりします。原型を留めているうちにその姿を写真と動画に収めておきましょう。

今回のIsevotの、まさに完成直後の写真です。家で作って家で撮りました。この作品が結構大きい影響で生活空間が圧迫されています。

オセロロボット Isevot


発表・審査方法の確認と戦略

今回、発表は3分で、質疑応答はなしでした。つまり、きっかりその3分で全てが決まります。質疑応答があれば質問されたことに対してうまく補足的な説明ができますが、それもできません。これは結構厳しい条件です。

さらに、今回は特に審査員の幅が広いです。審査員は大きく分けて4グループあります。

  1. 企業審査員

  2. 学生他テーマ登壇者審査員

  3. 学生聴講審査員

  4. 学生サポーターズ会員審査員

サポーターズ会員審査員だけが、録画されたプレゼンを視聴することで投票できます。

それぞれの審査員一人一人が1位から4位を選び、順位に応じたポイントが各作品に加点されます。各審査員グループの中で各作品の平均の点数が計算され、審査員グループのそれぞれの点数の重み付け和が最終得点となります。重みについては企業審査員の平均点数が倍になるというものです。

さて、まずは企業審査員(大人)と学生審査員の重みがどうなのかを考えましょう。最後に企業審査員の点数が倍になるので、企業審査員と学生審査員の点の重さは2:3です。

さらに、個人の持つ重みを考えてみましょう。企業審査員はテーマにもよりますが、数人です。学生審査員では登壇者・聴講共に数十人(?)、さらにサポーターズ会員審査員はもはや何人になるか全くわかりません。

ということで、総括して考えれば、企業審査員の個々の持つ影響力はかなり大きいですが、それだけではいけなくて、学生に広く受け入れられるプレゼンを3分で行う必要があるということになります。なかなか厳しい話です。

そして、今回の審査基準(全テーマ共通)は以下の3つでした。

  1. 技術レベル

  2. 完成度

  3. 作品の価値

この条件に対してどういう戦略を取れば良いかを考えると、私は結局、「万人に凄さと面白さがわかる、熱意を感じる発表にする」ことに帰着しました。

企業審査員だけであれば企業審査員の好みに特化したプレゼンに仕上げることもできないことはありませんが、今回はたくさんの学生審査員の心をつかむ必要があります。詳しい技術の話をすればその技術が好きな人の心には刺さるでしょうが、それだけでは勝てそうにありませんでした。とは言え、技術がメインのコンテストですから、技術について触れないわけにもいきません。そもそも審査基準に技術レベルが当然入っています。

今回の作品では、技術についてを搭載AIに、完成度は完全に全自動というところに、作品の価値は人間は見るだけというコンセプトに持たせることを念頭にプレゼンを構成しました。


プレゼン

実は本当に忙しさが極まっていて、プレゼンを作り始めたのは発表の3、4日前です。しかし、それ以前に頭の中ではストーリーと構成を考えていたのですぐにスライドはできました。

ストーリーとしては、以下のようなものを考えました。

  1. オセロAIをなんとなく作り始め、頑張って世界最強になった

  2. オセロAIに関する技術の簡単な解説

  3. ロボットを作って物理盤面で対戦したらボコボコにされた

  4. ロボット同士でお手本を見せてもらおうじゃないか

  5. あれ、私は見ているだけ…?いいんです。なんか楽しいので。

  6. 今後はオセロの完全解析を目指しています

スライドを作ったのが直前ということもあって、発表練習はおそらく10回もしていないです。とは言え、練習でも本番でも手元にストップウォッチを置いて話しているので、2、3回練習すると大体このスライドで何秒くらいを目指そうという基準がある程度できてきます。これを目安に、時間が足りていなければその後であまり必要じゃない情報を省いたり、逆に時間が余っていれば少し追加情報を話したりして、最終的に1秒ほどの誤差もなく無駄に3分ぴったりで話すことを目指しました。

余談ですが、今回は諸事情により家ではなく出先で発表しました。そのためにラップトップPCを使ったのですが、持ち運べる大きさの外部ディスプレイを設置して2画面体制で臨みました。私は発表原稿を全く書かないのですが、とは言え発表者ツールによって次のスライドが見えると少し発表が楽になります。

プレゼンはもちろん緊張しますが、一番大切だと私が思っているのはプレゼンすること自体を楽しむことです。話者が楽しければ、聴衆もそれに引きずられて楽しくなってきます。

ここからは一例として私のスライドを詳しく解説します。私の方法が絶対に正しいとは思いませんし、作品や話者との相性ももちろんあるでしょうから、あくまでも一例としてご覧ください。結局、よく考えてプレゼンを作り上げることが一番大切だと個人的には思っています。

今回使ったスライドはこちらでまとめて公開しています。

自己紹介

どんなに短い発表でも、私は必ず自己紹介をします。「私が発表します!良かったら名前覚えて帰ってね!」くらいの意図です。さらに自己紹介の内容がこれからの発表に繋げられるのであれば、うまく繋がるような紹介をすると良いと思っています。今回であればハード・ソフト・回路の何でもやること(AIからロボットまで作ったことに繋がる)、ルービックキューブとオセロが好きであること(オセロにかける情熱の導火線的な意図)を話しました。

オセロAIを作っている話

今回の発表で難しいのは、技術的な凄さは主にオセロAI自体の開発にあるものの、無駄さはロボットにあるということです。うまくオセロAI単体からロボットへの流れを作ることが必要でした。

作品のアピールももちろん大事ですが、何よりも大事なのは聴衆を味方につけることだと思います。プレゼンの最序盤でインパクトを与え、その力で3分聴いてもらうことを目指しました。

ここでは「オセロAIコンテスト世界1位」さらに「コンテスト外でも世界最強」というわかりやすい実績を話すことで、技術的な凄さを感じさせつつ一気に聴衆を引き込む作戦にしました。

さらに、スライドでは「半年」と「3秒」という無駄にメリハリのある時間の経過を示し、現在も開発中であると書くことで、ずっと開発していることをアピールしました。

コンテストの話をするタイミングで、コンテストの様子として10秒くらいの動画を流しました。しかし、発表時間は3分しかありません。動画を流している間も決して口を動かすのは止めないように、話しながら動画を流せるように、話す内容を考えました。

なぜ私のAIが強いのか

前述の通り、今回の作品における技術の「凄い」要素はAIにあります。この後には話がロボットに移っていくので、ここで技術要素を入れました。世界1位などの数字でわかる凄さに加え、具体的にどういう技術で動いているのかを簡単に解説します。

ここでも、発表の時間がないことが影響して少し工夫をしました。例えば「Negascout探索」などという言葉を口で言ったところで、わかる人にしかわかりません。この場合、本当に伝えたいのは「高速なアルゴリズムを使った」ということです。これを口で喋りました。具体的な技術の名前はわかる人であればスライドに書いてあるだけでわかります。

さらに、評価関数の部分に独自アイデアを取り入れてゲーム情報学研究会で発表したという情報を入れたかったので、仕方なく評価関数については軽く口で解説しました。まあ字面で想像がつくのでこれくらいは許容範囲なつもりです。

コードの行数も、一概には言えませんが、アピールポイントになると思います。長いコードであれば、それだけスパゲッティコードになっている可能性も否定はできませんが、それだけのコードを管理することができる技術力があると言うこともできなくはないです。それと、特にコードを書かない人に対して純粋に長いコードを書いたと言うと「おおっ」となりやすい気がします。

スライドには実際のコードを投影しました。見たい人はこれを見せられるだけで食いつくでしょう。投影したのはまさにNegascoutという一番重要な部分です。

自作AIと盤面を挟んでオセロがしたい!

ここまでで技術に関する情報は十分に伝えられたので、ここから話は「無駄さ」に移っていきます。審査項目で言えば、完成度と作品の価値を同時にアピールします。

まず、でかでかとスライドに「自作AIと盤面を挟んでオセロがしたい!」と出すことで、ここで一つ区切りとなることを示唆します。時間が十分にあれば目次を作って適宜挟みますが、そんな余裕はありません。

さらに、口頭で「ここまで強いAIを作ったら物理盤面で対戦したくなりますよね?」と問いかけました。このスライドはインパクトが強く、かつ言っていることもかなりクレイジーです。いや、実際こう思って作り始めたことに変わりはないのですが、とにかくここでオセロ愛というか、狂っている感じを強調しました。アピールするまでもなく私自身が狂っているのは自覚していますが…

自作ロボットにボコボコにされる様子

この3スライドはネタ、笑わせることを主に目指したところです。ロボットの動作確認に実際に対局してみたら黒番の私は全滅させられてしまったのですが、その様子を写真に撮っていたので写真を並べました。

ネタ要素以外の点も一応あることにはあって、(所詮私レベルではありますが)人間の私が全く敵わないという事実を強烈に突きつけることができるので、AIの強さをアピールできます。さらに、強すぎることは、次の話であるロボット同士の対戦にうまく繋げることができます。「序盤は頑張っていたが中盤で怪しくなり、結局全滅」という流れも、私自身がそれなりにオセロを人力でやっていることを暗に示せると思います。

ちなみに、オセロは60手で終わりますが、最終20手程度はAIであれば一瞬で読み切ってしまいます。この対局は確か、その読み切りですでに「+64」つまり私が全滅するという事実が私に突きつけられていました。口頭で「心が折れました」と言いましたが、本当に全く話を盛っていなくて、心が折れました。

ロボット同士でオセロ

「オセロロボット Isevot」という題名で発表しているので、先程の人間vsロボットで満足した気になった人もいらっしゃったことでしょう。しかし、ここからが本題です。聴衆の期待を良い方向に裏切り、ラストスパートとして強烈な印象を与えることを目指しました。

またインパクト重視のスライドを出しました。そして、口頭では「心が折れたので、ちょっとロボット同士で対局してもらいましょう」みたいな、これまた訳のわからないことを言いました。本当は「ロボット同士がオセロをして、人間はそれを見るだけという現象に人は何を感じるのか」みたいな興味で作りましたが、ここは3分の技術者向けの発表です。そのあたりの詳しい話はしません。

ロボットの動いている動画

実は、ここまでロボットの動画は一切出していませんでした。私のよくやる手段としては冒頭に動画を出して聴衆を惹きつけるというものがあるのですが、今回は動画にそこまでのインパクトが感じられず、かつ動画だけでそこそこ時間を使うので後方に配置しました。

私の場合、スライドがある意味のメモとなって、スライドに書いた言葉を見て何を話すのかを思い出すのですが、動画にはその情報がなくて苦しく、かつ時間も切羽詰まっているので念のため補足として言葉を入れました。

余談ですが、公開されている私の発表を見ると動画がめちゃくちゃカクついていますね…悲しい…多分zoomの動画向け設定を入れ忘れました…

セルフツッコミ

ここまでですでに聴衆は大量のツッコミで頭がいっぱいでしょうが、念のためここでセルフツッコミを入れておきました。普段はここまで明確にはしないのですが、今回はサポーターズ会員審査員としてその場の熱気がない状態でこのプレゼンを見る人がいるということを考えると、一応やっておこうという気持ちになりました。

無駄開発の決まり文句でもありますが、とにかく作者がその作品を楽しむことが一番大切だと私は思っています。

展望

私は短い発表でも展望を入れがちです。私は、過去に意味はほとんどなくて、大事なのは過去にあぐらをかかずに未来に向かって走り続けることであると考えています。今回であれば、オセロロボットを作って楽しくて終わりというわけではなく、さらに完全解析というロマンまで目指していることを言いたかったです。

ちなみに、完全解析自体も無駄開発の極みで、完全解析したところで何の役にも立ちませんし、何の社会的影響もありません。ただのロマンです。

実はすでにオセロAIの完全解析の土台となるような研究を個人でやっていたりします。

まとめ

これも様々な発表で必ず入れるようにしています。特に短い今回のようなプレゼンではとにかく情報を詰め込むので、聴衆は「なんかとにかく情報量が多かった…」みたいな感想になりがちだと思っています。最後に全体の流れをおさらいすることで、それを回避できると考えています。

それと、時間がなさすぎて多分QRコードを出す意味は全くなかったのですが、Twitterをやっているという情報をここで流せるので、TwitterでオセロAIやオセロロボットについて調べてくださる方がいらっしゃれば嬉しいなと思ってTwitterのアカウントを載せました。


結果発表

技育展をすでに2連覇しているという立場ですから、私がその事実をどう考えていようと、ある程度は3連覇を期待される、あるいは「打倒にゃにゃん」みたいな目線で見られます。常にプレゼンには全力を投入して楽しみますが、今回は戦略を練って周到に用意したことでおわかりのように、勝ちに行くことをかなり意識しました。

ですが…優秀賞に終わってしまいました…

個人的に満足いく結果ではありませんでしたが、全力は出せました。今後も引き続きいろいろなものを作ります。


まとめ

去年も一昨年も書きましたが、とにかく応募するのはタダです。技育展に限った話ではないですが、軽率に応募しましょう。

「私はまだ技術力が足りないから…」と言って躊躇している人を今年見かけたのですが、技術力が足りているかを判断するのは書類審査やプレゼンの審査をする人たちであって、作者ではありません。とりあえず応募しましょう。

ここまで書いていなかったのですが、技育展は参加者同士の交流があるという点でも最高のコンテストです。技育展の書類審査を通った人はみんな猛者です。去年であれば私自身、交流会からコラボが発生したりしました。とても刺激になるので交流会も無理のない範囲で楽しみましょう…!去年のコラボ作品はこちらです。

今回の記事ではこれまで以上に私のコンテストに向けた戦略について詳細に書きました。色々考えて作ったことは確かですが、言語化したことはなかったのでこんな量になるとは思っておらず、驚いています。この記事がもし誰かの役に立てば私はとても嬉しいです。そして、今後も私はさらにものづくりを楽しみ、たまにコンテストや展示会に出ます。

みなさんも、良いものづくりライフを!


この記事が気に入ったらサポートをしてみませんか?