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

エンジニア 2018.03.05

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

AI戦略室の坂本です。
某日、ココングループ内向けにAIハンズオンを開催し、思いのほか好評だったので、ブログ記事として公開することになりました。

題して、
『非プログラマでも出来る!君もAIを作って賞金稼ぎになろう〜Kaggle超入門〜』
少し長めの記事ですが、よろしくお付き合いください。

目次

今回のハンズオンについて

さてさて、AI戦略室初のブログ記事と言うことで、どんな雰囲気で書き出して良いものやら悩むところです。
しかしせっかくブログという場で書くのですし、私(坂本)が書く記事はこんな感じのざっくりとした雰囲気で進めてゆきたいと思います(笑)。
お堅い文面の技術解説が読みたい方は、技術本を何冊か出しているので、そちらを読んでください。

今回のテーマは、AIハンズオンです。
AI戦略室では、グループ内への最新技術の普及や啓蒙活動も業務の一つなのですが、その関係でグループ企業のメンバーに向けて、1時間ほどで終わる簡単なハンズオンをやりました。
今回はその内容の報告と、皆さんも是非一緒に簡単なAIを作成してみよう、という内容になります。


Pythonの‘P’から始めるAI作成

今回のハンズオンは、プログラミングの経験が【まったく無い】方を対象にして、AIを作成してみることを目的にしています。
主に営業や管理職など、技術者以外の社員に対して、AI作成の実際の所を肌で感じて貰って、今後の業務に生かして貰おう、という趣旨ですね。
セミナーなどで勉強するのも良いですが、やはり自分で手を動かして、何かしらのものを作って貰うと、実際の現場の 苦労が解る 実務を知ることが出来る訳です。
そして、自分の仕事とは別に参加するモチベーションとして、賞金稼ぎというワードが入っているのですが、実際には賞金目当てでは無い純粋に勉強熱心な社員が多くて、弊社CEOを初めとして様々な役職から参加者が集まりました。グループ内の会社や役職の違いを壁と感じさせない雰囲気はココングループの魅力の一つですね。

勉強会の様子

そんな訳ですので、今回は本当に初心者、完全に素人相手のハンズオンとなりますが、もちろんココングループには素人だけしかいないわけでは無く、技術者集団は別にいるのでご安心を。

さて、いくらハンズオンとはいうものの、いきなりAI作成を始める訳にはゆきません。
AI作成のためにPythonのプログラムを作成する必要があるので、最初に最低限これだけは知っておかなければならない、Pythonの知識を紹介します。
ハンズオンやセミナーでは、ある程度参加者のレベルが揃うので問題ないですが、ブログ記事だといろんな人の目に触れるから、どの程度のレベル感を想定すべきかが難しいですね・・・。このくらい知ってるよ、という方は読み飛ばしてください。



まず、Pythonとは「プログラミング言語の名称」です。そして、プログラムコードは、上から順番に実行されます。←そこからかよ!
上のスライドを見てください。
合計3行のプログラムコードが書いてありますが、下の2行は行の頭に空白を入れて書き出しを揃えていますね。
この空白のことを「インデント」と呼びます。
そして、Pythonでは、「インデント」でプログラムのブロックを作成します。
下のスライドには、Pythonにおけるプログラムのブロック構造が書いてあります。
重要なのは、タブと半角スペースは混在出来ない、全角スペースは使えない、という点です。
プログラム言語に詳しい人からは突っ込みが入るかもしれませんが、今回のハンズオンは本当にプログラミング未経験者を対象にして、とりあえずその場でAIを作って貰う事が目的なので、コードを壊さずにコピー&ペースト出来るだけの知識を身につけてもらうだけの内容になっています。
同様に、ニューラルネットワークの基礎知識です。


これも、詳しい人からは突っ込みが入りそうですが、今日ハンズオンの間だけはこう思っててくれれば良い、という内容です。
要するにニューラルネットワークとは、何かデータを入れれば何かが出てくるように組み合わされた、小さな小さなプログラム(人工ニューロン)の集まりです。
そしてその組合せ方を作成するには、機械学習の手法が利用されます。今日のハンズオンはそれだけ理解していれば、なんとかなるようにしてあります。

‘Kaggle’にサインインしよう

さて、お勉強はこのくらいにして、ハンズオンらしく手を動かしましょう。
このハンズオンでは、【Kaggle】というサイトのプラットフォームを利用してAIを作成します。
Kaggleはデータ解析を行うエンジニアの集まるサイトで、企業が解析したいデータをコンペティションの形で公開し、優れた解析モデルを作成したユーザーに賞金を出しています。
ハンズオンのタイトルに、「賞金稼ぎになろう」とあるのは、Kaggleのコンペティションに参加するまでを行おう、ということです。

まずは、http://www.kaggle.comを開き、アカウントを作成します。

次に、初心者向けのチュートリアルとなるコンペティションがあるので、それに参加します。
今回は、「Digit Recognize 」というコンペティションに参加します。
この「Digit Recognize 」では、手書きの数字画像を認識して、0から9までのどの数字かを返すモデルを作成し、その結果を競います。
このコンペティション機械学習でよく利用されるサンプルデータを使用しています。
元が広く公開されているデータなので当然賞金は出ませんが、Kaggleの入門とコンペティションに参加する手順のチュートリアルとして用意されているサンドボックスなので、良いモデルを作成しなければ等と考える必要は無く、手慣らしとして参加することが出来ます。
Kaggleのチュートリアルとして、プロフィールを入力しろとか掲示板にコメントしろ等のメッセージが出ますが、今日の所は無視して進めます。
(Kaggle続けたい人は後で勝手にどうぞ)


さて、Kaggleでは、データ解析を行うスクリプトプログラムのことを、【カーネル】と呼んでいます。
まずはコンペティションのページから、「Chainer-MNISTClassifier-base」でカーネルを検索します。
すると、私の作ったカーネルがあるので、それをフォークします。
見つからなければ、https://www.kaggle.com/tanreinama/chainer-mnistclassifier-baseから直接カーネルを開きます。
(ハンズオンの当日は、文字列で検索してもカーネルが出てきませんでした。カーネルの並び順を、新しく登録された順にして、上から探すと見つかります)
その後、「Fork Notebook」をクリックして、カーネルをフォークします。


カーネルをフォークしたら、とりあえずそのまま実行してみます。
「Publish」を押してしばらくすると画面が変わるので、「Versions」タブをクリックします。
「Versions」タブの中には、カーネルの編集履歴が表示されますが、そのうち最新のものの横に、ぐるぐる回るアイコンが表示されていると思います。
カーネルの実行が完了すると、ぐるぐる回るアイコンがチェックマークになるので、今度は「Outputs」タブをクリックします。

そして、「Outputs」タブの中で「submission.csv」を選択し、「Submit to Competison」をクリックすると、コンペティションに解析結果を登録します。
スコアリングが終了すれば、参加者の中に自分の順位が表示されると思います。
やはりこの、自分の順位が表示される瞬間がハンズオンでは一番盛り上がる瞬間ですね。
ニューラルネットワークの学習には乱数が使用されるので、全く同じカーネルを使ってもみんな少しずつ結果が異なり(といっても小数点以下の誤差ですが)、順位も少しずつ違うので、誰それは少しスコアが良いだとか、皆さんに賑やかに楽しんでいただけたようです。
まぁその程度の差は、この後ニューラルネットワークのモデルを改良してゆけば、すぐに追い越されてしまうので、今だけの楽しみなんですけど。

ハンズオンはこの時点でほぼ半分が終わりです。
後半は、ニューラルネットワークのモデルについて解説と、モデルの改良をしてゆきます。

続きます。

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

イベント広報 2018.08.17

“ハッカーの祭典”DEFCON 26 レポート -その2-

広報の馬場です。 前回のブログで、「DEFCON 26」にはDEFCON CTF以外にも様々なイベントが開催されている…

イベント広報 2018.08.11

“ハッカーの祭典” DEFCON 26 現地レポート -その1-

広報の馬場です。 今、アメリカ・ラスベガスで開催されている「DEFCON 26」に来ています。 今回の目的は、…

エンジニア 2018.08.01

少数の例外値を発見する手法について〜例外画像の検出ニューラルネットワーク〜

AI戦略室の坂本です。 AIはその応用範囲の広さから、様々な分野に利用されうるのですが、現状でビジネスス…