ココンの情報をいつでも、どこでも。ココントコ。

エンジニア 2018.03.05

非プログラマでも出来る!君もAIを作って賞金稼ぎになろう〜Kaggle超入門〜 -後編-

AI戦略室の坂本です。
『非プログラマでも出来る!君もAIを作って賞金稼ぎになろう〜Kaggle超入門〜』
AIハンズオンの後半になります。
このハンズオンは、プログラミングの経験が【まったく無い】方を対象にして、AIを作成してみることを目的にしています。
主に営業や管理職など、技術者以外の社員に対して、AI作成の実際の所を肌で感じて貰って、今後の業務に生かして貰おう、というのが、このハンズオンの趣旨になります。
ですので、今回は本当に初心者、完全に素人相手のハンズオンとなりますが、もちろんココングループには素人だけしかいないわけでは無く、技術者集団は別にいるのでご安心を。
前編:非プログラマでも出来る!君もAIを作って賞金稼ぎになろう〜Kaggle超入門〜 -前編-

目次

ニューラルネットワークの基礎中の基礎

前回は、最低限のPython&ニューラルネットワークの知識と、Kaggleに登録してカーネルをフォークする所まででした。
今回は、まずはフォークしたプログラムのざっくりとした解説から。

プログラムの内容はわからなくても、今回は問題ありません。
ざっくりと、上から順に必要なライブラリのインポート、クラスの定義、データの読み込み、ニューラルネットワークの作成、ニューラルネットワークの学習、実行結果の保存、という流れになります。

さて、このプログラムでは、ニューラルネットワークのモデルをPythonのクラスで定義しています。
クラスとは、これもプログラム詳しい人からは突っ込まれそうですが、プログラム中のデータや処理をまとめて抽象化した構造だと思ってください。深く話すとオブジェクト指向とは、という話になって、それだけで1日が潰れてしまいます。ご容赦ください。
で、そのクラスの中の、
・「self.layer1 = L.Liniear(None, 10)」 という場所で、ニューラルネットワークの層を定義しています。
・「x = self.layer1(F.relu(x))」 という場所で、ニューラルネットワークの層をにデータを入力しています。

ここで言う「層」とは、全ての入力が全ての出力に繋がっている人工ニューロンの集まりで、このような層を全結合層と呼びます。
順伝播型と呼ばれるニューラルネットワークでは、このような層を沢山積み重ねることで、複雑なモデルを作成します。
層を定義している所にある数字は、その層における入力の数と出力の数を表しています。
つまり、今あるニューラルネットワークは、入力の数は未定義(なんか沢山)で、出力の数は10である層が、1層あるモデルになります。

なぜ出力の数が10個なのか。
これは、今回作成するニューラルネットワークのモデルが、10個のクラス分類を行う目的で作成されるためです。
クラス分類とは要するに、入力されるデータをいくつかの種類に分類する問題のことで、今回参加しているコンペティションは手書きの数字の画像を、0から9の種類へと分類する問題を扱っているためです。
画像をクラス分類する問題はニューラルネットワークの入門としてよく利用されるので、初心者向けのチュートリアルとして最適なのです。

カーネルを改良してみよう

さて、それでは次に、今のカーネルを改良してゆきましょう。
Kaggleではウェブブラウザからカーネルの編集と実行が可能な、オンライン開発環境が整っています。
今回のAIハンズオンの環境にKaggleを利用したのは実はこれが大きくて、開発環境のセットアップなどで時間を取られたくなかったためなんですね。あと賞金稼ぎというワードを入れたかったというのもありますが。

今は全結合層が1層あるだけのニューラルネットワークですが、これを3層くらいに増やしてみます。
このあたりから参加者が独自で違うことをやり始めて、3層くらいというのを4層にしてみたり5層にしてみたり、あるいは中間の値の数を32個から別の数にしてみたりと、個性を発揮する余地が現れます。

そして、その自分で独自に変えた結果が、そのまま順位となって現れるのが、Kaggleの良いところですね。
大勢が机を並べてハンズオンをやると、隣の人のスコアを上回ることが目標になりますから、飲み込み早い参加者は、モデルを少し変えてどうなるかと、何度もカーネルを実行し始めます。
そこら辺まで進めると、モデルの作成が楽しくなってくるようで、どこをどう変えてスコアがどうなったなどの話が飛び交うようになり、実に技術ハンズオンっぽい雰囲気が出てきます。

ただしここで注意ですが、カーネルの実行回数は一日の上限が決められています。あまり調子に乗って何度も実行してしまうと、明日まで実行できなくなってしまいます・・・。

畳み込み層を追加してみよう

さてさて、今回のハンズオンは業務時間中に行ったこともあり、1時間程度の短いものでした。
参加者によって進める速度が違いますから、遅い人に合わせて進めていると、そろそろ残りの時間が気になってきますが、順調に進んでいる参加者はさらにカーネルの改良をしてみましょう。
それには、「畳み込みニューラルネットワーク」という種類のニューラルネットワークを作成します。
畳み込みニューラルネットワークとは、畳み込み層という層を含んだニューラルネットワークのことで、畳み込み層ではデータの相対的な位置を扱うことが出来るので、画像などパターンを含んだデータの認識に効果を発揮します。

今のカーネルを畳み込みニューラルネットワークを使用するように改良するには、ニューラルネットワークのモデルを定義しているクラスで、新しく畳み込み層を定義し、

学習部分でデータを扱っている箇所を、1次元のデータから2次元のデータを扱うように変更します。

プレゼン資料はあえて画像で貼り付けているので、コピー&ペースト不可です(笑)。皆さん資料を見ながら頑張ってコードを打ち込んでいました。やはりハンズオンは手を動かしてこそなので、狙い通りというか、コピー&ペーストで進めても面白くないですしね。

そしてカーネルを再実行すると、スコアがもう少し上昇します。

まぁ他にも改良の余地は沢山あるのですが、それらは参加者の今後の課題と言うことで・・・。
以上でハンズオンの内容は終了です。
午後6時から始めて合計1時間ほど、手の空いている方のみ参加で開催しましたが、思ったより好評だったので、業務があって参加できなかった方を対象にもう一度開催したいところです。

おわりに

それにしてもKaggleは楽しいですね。
頑張って賞金を狙うのも良いですが、掲示板などでの議論も盛んですし、カーネルを公開して自分のアルゴリズムを沢山の人に見て貰ったりと、オープンソースコミュニティのノリを味わえます。
そして思ったのが、中国人・ロシア人と思われる参加者は割といるのに、日本人と思われる参加者が少ないこと・・・。また、Kaggleでは企業の採用情報も掲載されているのですが、香港の求人はあるのに日本からの求人は見当たらない・・・。
こういった点からも、データ解析やAI作成という領域では、日本はまだまだ立ち後れていると言えるのではないでしょうか?
日本のAI研究者も、一企業内でノウハウを閉じ込めてしまうのでは無く、もっと世界に目を向けて欲しいものです。
ココングループでは、22世紀への前進に貢献するという目標を掲げていますが、AI戦略室としても、先端技術の研究・開発のほか、セミナーや講演活動を通じた啓蒙活動も重要な任務であると考えています。
今回のようなハンズオン、セミナー、講演などの社外に対する実施依頼がありましたら、AI戦略室までお問い合わせください。

イベントインタビュー広報 2020.01.31

「OpenID Summit Tokyo 2020」参加レポート

広報の馬場です。4年に一度のOpenIDの祭典「OpenID Summit Tokyo 2020」が渋谷ストリーム・ホールにて1月2…

イベントインタビュー広報 2019.11.11

世界のハッカーが競う「DEF CON CTF Finals 2019」参加者インタビュー

広報の馬場です。 DEF CONの人気コンテンツの一つである「DEF CON CTF」は、熾烈な予選を勝ち抜いたチーム…

エンジニア 2019.08.23

危険すぎると話題の文章生成モデル「GPT-2」で会社紹介文を生成してみました

ココングループのAI TOKYO LABの細川です。AI、特にディープラーニング系のホットな技術を実際に動かすと…