検索検索
English

ライトニングトーク会「ほやほやな新卒エンジニアによる面白い話」開催報告

2020年8月27日、SOY倶楽部勉強会の特別企画としてライトニングトーク「ほやほやな新卒エンジニアによる面白い話」がオンライン開催されました。2020年度入社の新卒エンジニアが業務時間の50%を活用して取り組んだ独自アプリケーションやOS開発の進捗や成果を報告しました。

カルチャー2020年9月14日

エンジニアを含むビジネスパーソンにとって、夢や目標を描く想像力と、それを形にする創造力を併せ持つことが大切だ...。サイオステクノロジーが社内で掲げるコンセプトの1つである。新卒採用のエンジニアに対して「50%ルール」を実施するのはその一環だ。業務時間の50%は自分の関わるチームへの貢献に使い、残り50%を自分自身の能力を高める研鑽に充て、成果物を作って発表する、という約束事である。今回のLTでは開発の現状や成果、これからの展望を3名の新卒エンジニアが紹介した。

20200827_LT_pic.png
今回LT発表を行った、藤原秀平、有村勇樹、岡田悠馬(写真左から)

強化学習のベースになるOSを一から開発

「何も知らなかった新卒がOS開発をしている話」というタイトルでLTを行ったのは、エンジニアの藤原秀平。入社して認証基盤構築などインフラ系の開発グループに所属している。

「配属直後に、業務時間50%ルールに基づいて、『テーマは自分で決めてよいから3カ月間で何か成果物を作るように、ただし面白いものを』と言われました。大学時代に学んだ深層学習、業務で習得中の認証技術などテーマを探しましたが、せっかくチャレンジするなら思い切って、まったく畑の違うこと、OS(基本ソフト)を作ってみようと思いました」(藤原)

Windows、MacOS、CentOS*1やUbuntu*2といったLinuxなど現在さまざまなOSが存在するが、画面(GUI:Graphical User Interface)の見栄えや操作性にはそれぞれ特徴がある。

「開発中のOSは、機械学習の一種である強化学習を通じて、UIが進化する予定です。名付けてShinkasuru Intelligence OS、略して『SIOS』。どんなUIになるのかは、学習させてみないとわからないので私も楽しみです」(藤原)

開発チームのメンバーは藤原を含めて3名。機械学習に関心のある同期が参加している。

進化するOSを作るには、土台となるベースOSが必要になる。藤原はベースOSを自作するため、参考書籍を手本に一から作ることにした。

「プロセッサを動かすアセンブリ言語や、開発メンバーとコードを共有するgitの環境など、初めて触れる内容につまずきながら約100時間かけて、どうにか必要最小限の機能を備えたベースOSを完成させました」(藤原)

OSはモノリシックカーネルでCentOSやUbuntuと基本的に同じ構造だ。ハードウェアはQEMU*3というツールでエミュレートしている。LTで藤原は、開発したベースOS上でインベーダーゲームなどのデモアプリを実演した。

「開発中に学んだOSの知識は、『SIOS Tech. Lab(サイオステクノロジーが運営するエンジニア技術ブログ)』に継続的に発信しています。ぜひご覧ください」と藤原。今後は、複雑化したソースコードの依存関係を整理し、強化学習の仕組みづくりを本格化させる計画だ。

Vue.jsで作ったWebアプリケーションからツイートする環境を構築

統合ID管理やアカウント管理などの技術を習得中だったエンジニアの有村勇樹が、仲間とともに開発しているのが、自然言語処理を用いて面白い短文を作成し、ツイッターに投稿するためのWebアプリケーションである。単に自動的に投稿タスクを繰り返すインターネットボット(ボット)ではない。

「ツイートする文章は自然言語処理技術を用いて自動的に複数生成されますが、その中からユーザーが『面白い』と思うものを選択して、任意のタイミングで投稿できるような仕組みを目指しています」と有村は概要を説明する。

短文の自動生成機能は、自然言語処理に取り組む仲間のメンバーが担当している。一方、ツイッターに投稿するには、クライアントであるWebアプリケーションからログインしたうえでツイートする機能が必要だ。そこでの認証周りを含めた部分をVue.js(ヴュージェイエス)などを用いて有村が開発している。Vue.jsは効率的なWebアプリケーション開発を支援するオープンソースのJavaScriptフレームワーク。有村は、50%ルールの時間を利用して独習していた。

ただ、Vue.jsで作った画面から、ログインユーザーとして投稿するために必要なTwitter API*4を直接操作できないことを有村は開発中に気づいた。調べるとこれはツイッター側の仕様だった。

そこで有村は方針を変え、Vue.js側から直接投稿するのではなく、「Twitter APIを扱うAPI」を自作してこれをワンクッション挟むことにした。

「Vue.jsすなわちクライアント側でのログイン時に入手・保管した情報(アクセストークンなど)をユーザーがツイートする際に送信する、バックエンド側のシステムを開発しました。当初は思いつきで始めた開発ですが、実際に動くものをつくってみると予想していなかった壁や思いがけない発見をたくさん経験できました」と有村。エンジニアとしての自信につながった。LTでは、Webアプリケーションの画面からツイートを投稿できる試作アプリの動作を披露した。

将棋AIの開発を通じて深層学習の仕組みを深く理解

最後にLTを行なった岡田悠馬は、「将棋AIの理論とこれから」と題して、開発中の将棋AIとその過程で学んだことを話した。

「50%ルールで何をしようかな、と考えた時、『深層学習の勉強をしたいな』と思いました。将棋AIを選んだ理由は、率直に言って『何より超楽しそう』だったからです。会社の先輩に正直に伝えたところやってみたら、と受け入れてもらえたのですごくいい会社だな、と思いました」(岡田)

将棋は棋士が交互に駒を配置していくことで盤面が変化していく。コンピュータ将棋では一般に、指した手をエッジとし、それらをノードで結ぶ有向グラフで盤面を表す「ゲーム木探索」というデータ構造とアルゴリズムが使われる。

「コンピュータがどの手を指すか決定する際は、ある程度の深さのノードの盤面に、盤上の駒の数や種類に基づいて付けた評価値を一般に利用します。評価値の精度を高めるには理論上、深いノードから探索すればよいですが、計算量が膨大になり過ぎて支障が出ます。これを回避するため私は、方策ネットワークを用いた学習アルゴリズムで指し手を精度よく絞り込む予測(枝切り)を行い、計算効率の向上を図りました。また、評価値の算出方法も、盤上の駒の数や種類に基づく従来の計算方法ではなく、変化する盤面を9×9マスの入力画像と出力画像として価値ネットワークに学習させて勝率の高い手を最善手とする評価方法としました」(岡田)

LT時点で実装が終わっていたのは方策ネットワークだった。試しに方策ネットワーク単体で将棋を指させてみたところ序盤はめっぽう強かったが、終盤は一転して弱い傾向がわかった。

「これまでいろいろな深層学習の本を読んだりネットで調べたりしたのですが、どんな処理が行われているのか具体的にイメージできずにいました。しかし、畳み込みニューラルネットワークである方策ネットワークを実装するコードを書きながら挙動を見ると、どんな処理が行われているのか、より深く理解できるようになりました」(岡田)

また、データの前処理の大切も知った。

「ある時、将棋AIが弱くなったので原因を調べてみると、学習させた過去の棋譜データの中に『千日手』が混ざっていました。エンジニアの視点ではコードを書き終わったら満足しがちでしたが、読み込ませるデータ次第でAIの挙動は大きく変わります。おろそかにしてはいけないと痛感しました」と岡田。さて、これからの開発方針は。

「将棋AIは確かに人間の棋士を凌駕する面もありますが、その指し手は最善手を指し続ける特性上、ドラマが生まれにくい側面があります。より強い将棋AIを目指す一方で、面白い手を打つエンタメ性に富んだ将棋AIにできないか、いろいろなアルゴリズムを試してみたいと考えています」(岡田)

本LTのレポートを通じて、サイオステクノロジーの自由な社風が少しでもお伝えできただろうか。読者の中には、若い頃を思い出された方もいらっしゃるかもしれない。サイオステクノロジーでは今後もさまざまなイベントを企画している。ぜひお楽しみに。

*1 CentOS(セントオーエス):Red Hat Enterprise Linuxと機能的に互換性があることを目指したフリーのLinuxディストリビューション。
*2 Ubuntu(ウブントゥ):フリーで提供されているLinuxディストリビューションの1つであり、Debian GNU/Linuxを母体としたオペレーティングシステム(OS)。
*3 QEMU(キューエミュ):Fabrice Bellardが中心となって開発するオープンソースのプロセッサエミュレーター。
*4 API(Application Programming Interface):アプリケーションやソフトウェアとプログラムをつなぐ機能。

記事の関連情報