2017年12月6日水曜日

iPhoneでもApp Inventor!(その3)

 iPhoneでもApp InventorThunkable)の第3弾です。今回は、Thunkable for iOSに備えられたAssistantというブロックを使った簡単な例です。これは、音声(またはテキスト)で、iPhoneと会話するものです。AssistantはGoogleのDialogflowの仕組みを使って音声応答するものです。

 そのアプリの使用例を示します。音声で、「学科忘年会」とか「卒論提出日」とか、iPhoneに向かって問うと、「2017年12月26日です」とか「2018年1月25日です」という答えが表示されます。

個人用 SiriのようなiPhoneアプリ


 日付に限らず、「外部資金課の〇〇さんに謝らなくては」、とか「教務課の△△さんに伝えなくては」という場合の電話番号取得などにも使えます。

 このような音声検索には、AppleのSiriGoogleの音声検索(OK Google)等があります。でも、例えば、本物のSiriに「卒論提出日」と問いかけても、まともに答えは返ってきません。本学科のローカルな情報ですから当然ですね。そこで、上記のような言わば、「私の個人的Siri」のようなものがあってもいいですね。

Siriに「卒論提出日」を聞いてもだめです

さて、このiOSのアプリは、以下のような僅かなブロック(処理)の組み合わせて作れます。Assistantという名のブロックを使っています。

ThunkableのAssistantブロックの利用


 そして、音声の問い合わせと日付の対応は、以下のようにGoogleのDaialogflowで定義します。それを、Assistantに接続しています。

Dialogflowによる会話のためのデータの定義


 このDialogflowは、クラウド上で設定されており、以下の特徴があります。
  • iPhoneアプリケーションを変更することなく、このDialogflowのデータを追加、修正でき、段階的に、実際に役に立つものに仕上げることができる。
  • 類似語「忘年会」、「学科忘年会」 ... などもsynonymsとして、思い付いたらどんどん追加できる。
  • 下記のように、ユーザが音声で問い合わせた場合の状況を示し、Dialogflowの学習状況を改善することができる。例えば、「卒研発表」と音声で問い合わせたつもりが、かなりの場合、「卒検発表」と誤認識された様子が分かる。学習改善に繋がる。
  • と思っていたら、いつの間にか例えば「卒論の提出」でも正しく日付が提示されるようになりました。「の」を含んだものは上記Dialogflowには自分では設定していませんでした!

「卒研発表」のつもりが「卒検発表」と誤認識された状況も分かり、学習を改善できる

2017年11月30日木曜日

20年前も人工知能や並列分散を学生諸君と学んでいた...

 ちょっと変わったタイトルになってしまいました。人工知能並列分散処理は、ここ本学ではどのくらい前からやっていたのか?自分でも忘れかけています。そんな時、書類整理をしていたら、実に20年前の「次年度卒研配属募集」の際に使ったと思われるカラーOHPが出てきました。

 今と比べると以下のような感じです:

  • こんなに簡単な募集案内で良かったのか、おおらか。
  • 本学としては、現状に比べて大学院生が多かったのではないか
  • 並列分散は指導教員が元々専門にしていたのであがっている
  • 人工知能とあるが、そのころはDeep Learningはありませんで、GAなどが先端的
  • Javaが急速に普及しはじめたようだ

 以下のOHPのコピーは、平成10年度募集の際のものと思われます。つまり、映っている15名(教員含む)は平成9年度の皆さんです。




2017年11月27日月曜日

iPhoneでもApp Inventor!(その2)

 iPhoneでApp Inventor(Thunkable)の続編(その2)です。もう一例作ってみます。非常に短いけれども、クールな例題と思います。リアルタイムデータベースFirebaseだと思います)の利用例となっています。

 具体的には、 「私のiPadで発生させた乱数をリアルタムに、友人B君のiPhoneに表示させる」というiOS用のアプリです。両者に共通の同一プログラムになっています。実行例を以下に示します。

私のiPad(右側)で発生させた乱数が、即座にB君のiPhone(左側)へ!

これは、簡単な例ですが、この枠組みによれば、以下のような応用にも直ぐにつながります。
  • センサからの許容範囲外の値の自動検出
  • 動いている物や歩く人の地図上でのリアルタイム追跡

 このようなアプリの処理方式としては、Bluetooth、WiFi direct等の通信を明示的に使うか、あるいは何らかのWebBDを介してB君側が明示的に待ち受ける(データベースの中身をチェックする)プログラムを書く必要があります。しかし、ここでは以下のように、データベースの内容が変わったら自動的に通知してくれる(リモートイベントとして伝わる)機能を使えるので、プログラムは非常に簡単になります。

これが、このアプリの処理の全てです(拡大してご覧下さい)

2017年11月26日日曜日

iPhoneでもApp Inventor!(その1)

 情報工学科では、この夏のオープンキャンパスで2回連続で、「従来型コーディング無しでスマホアプリを作成する」体験講座を実施しました。たいへん好評で盛況だったと思います。しかし、そこにはある制約が... そうです。端末はAndroid限定でした。でも、高校生のみなさんは、iPhoneを持っている(iPhoneしか持っていない)人も多いのも事実です。これは日本だけではありません。米国でも同様です。

 これまでは、このようなブロックプログラミング開発環境は、Android向けしかありませんでした。具体的には、MIT App InventorThunkableがありました。そのThunkableでは、下図のようにiOS(iPhoneやiPad)向けの開発環境を提供し始めました。これは非常にインパクトがあると思います。


iOSでもAndroidでもできる!

 Android向けとiOS向けでは、利用者に対する基本的な考え方は変わりません。でも、実際のインターフェース、操作手順はそれぞれのOSに依存して少し異なります。ですから、マニュアルも作り直さなくて行けません。しかし、それは些細なことです。両方のOSで、このすばらしいブロック型プログラミングができるのですから!

 では、上記オープンキャンパスで取り上げた3つの例題のうちの一つである、「人工知能による画像認識アプリ」iPhone用に作ってみます。Androidの場合と同じく、MicrosoftのImage Recongnizerが使えます!以下がその実行例です。




こちらの認識結果はなかなか良いと思います

[注] iOSの場合、Apple Store以外のアプリについては、インストールは厳しい制約がありますが、巧妙に安全に、自分のiPhoneへこのアプリはインストールできます。

 このアプリのユーザインタフェースの画面と、ブロック図を以下に示します。この2つがこのアプリの完全なソースプログラムとなっています。

ユーザインタフェースの設計
ブロック(処理部)の全体
なお、「撮影する」と「画像認識する」の2つのボタンを纏めてひとつにしたい場合の処理(ブロック)は以下のようになります。

「撮影」と「認識」を一つにまとまめた場合

2017年11月25日土曜日

人工知能学会 合同研究会2017

はじめに

 表記の研究会に参加した。11/24,25の2日間に渡り、多数のAI関連研究発表が行われた。小生はこのうちの1日だけ参加し、しかも、下記の招待講演と企業スポンサーの展示だけに焦点を絞って参加した。

イチョウが美しい慶応大学日吉キャンパス(学会はこの後ろの矢上キャンパスだが)

招待講演(11/24)

 「理研AIPセンターの取り組み」杉山 将 教授(理化学研究所/東京大学)

開始前にすでにほぼ満員の状態(これ以降は、撮影せず、聴講に専念)

 以下、私の理解したメモにすぎません。抜けはもとより、誤りもあるかもしれませんが、ご容赦下さい。何らかのご参考になれば幸いです。

◎雰囲気

 機械学習関係分野の世界的権威とみなされている杉山教授の講演とあって、開始のかなり前から、この講演(70分間)への注目度が高く、300人くらい入ると思われるマルチメディアルーム、ほぼ完全に満席、立ち見の人もいた。少し素人向けの解説から始まり、現在のAIの状況、今後の進め方、特に、国の機関なので国の方針も踏まえた内容であった。

◎要点(断片的にしか書けませんが)

 「人工知能:記号処理、ルールベース」「ニューラルネットワーク:バックプロパゲーション」「機械学習:隠れマルコフ、ベイズ理論など」の3つで成るが、それぞれ異なる。あまり融合してこなかった。実は、それぞれの多数の国際会議も別々の感があった。しかし、近年だんだん交流、融合が進んできたように思われる。

 最近の人工知能といえば、Deep Learningとみなされるとも言える。教師あり学習、教師なし学習、その中間くらいの強化学習(正解は与えないが、結果のフィードバックは行う)がある。強化学習は、アルファ碁あたりから注目が高まった。

 米国が圧倒的 関連国際会議の論文数などで。中国がすごいという報告があるが、ほとんどは米国でやっている研究者。日本人はかなり少ない。どの関連学会でも日本の採択論文は、数パーセントどまり。

 Deep Learningの最初の論文が出たのは、2006年。当時は、冷ややかな反応だった。10年かってすごいことになってきた。そういうものと思って、研究開発を進める。Deep Learningについて、まだまだ未解明、うまくできないことはある。

 教師データありの場合、ラベルの個数nならば、1/√nで誤差が減る。これは理論的に言える。教師データが無い場合、あるいは限られた情報しかない場合の学習方法について研究を進めている。いわゆる半教師付き学習方法の研究を追求している。少ない教師ラベルの状況での、信頼度、確率、補ラベル(正解でないラベル)情報を考慮した学習アルゴリズムはできている。
 会場からは、「私は、乳がん診断のための画像を学習させようとしているが、それにラベルを付けるコストが非常に大きいので、この学習法に期待したい」とのコメントもあった。

 10年後どうなるなどといういろいろな分野の予測も出されているが、それはどうなるか誰にも分からないと言えよう。Deep Learningは進めるが、さらにその先をめざす。AIとサイエンスを融合、結合して新たな世界を日本発にしたい。日本の強みを持つ分野にAIを活用していく方法を案出、策定する。以下のような分野:

・再生医療(京都大学ips細胞)
・ものづくり(名古屋大学の青色ダイオードなど)
・高度な高齢化対応
・防災、減災
・橋梁、トンネルなどのインフラの改築、整備
・AIの社会的影響に関する研究(倫理、プライバシー、セキュリティ、公平性)

 基礎理論、アルゴリズムの研究をやってきた。今後もそうだが、一方では、使ってもらってこそ本当の価値がある。したがって、実用面もやっている。しかし、企業の技術力には太刀打ちできないので、企業との共同研究、連繋も重要になっている。

 人材育成は真に重要:理研には、有力な大学教授らに参加してもらっている。すると、その学生も来る。企業、海外からも人材を受け入れている。約350名(このうち常勤は60名)。予算は数十億円、海外に比べると3桁も少ないが、基礎研究としては今のところやっていける。海外から人を集めるにも、米国との競争になる。米国の方が圧倒的に高給を出しているから。

 会場から、「高速学習のためのハードウェアは研究しないのか」との質問があった。それに対しては、それは産総研ではやっている。ここではやっていないが、AI専用マシンNDIVIA GDX-1 24台構成、半精度(一般の科学技術計算とは異なり、倍精度や4倍精度は不要というのは、納得できる)は所有している。今では最高速ではなくなったが、それでもGreen500(消費電力を勘案した性能を競う)では世界4位の性能である。最近、量子コンピュータの発表もあった。これにも大いに期待がかけられる。

(注)NDIVIA DGX については、筆者(山本)も、会場でメーカの展示デモをみた。4枚の高性能GPUを搭載したもので、撮影画像をリアルタイムに、指定した画家の画風に変換していた。実際、私の顔の撮影画像が、ゴッホ風の画像にリアルタイムに表示されたりした。特定の画家の多数の画像を学習済みにしておいて、このリアルタイム変換をforward処理で行っているという、オーソドックスな説明ではあったが。

2017年11月20日月曜日

人工知能でお菓子を認識する(その4)

 このSony Neural Network Consoleの、まだ述べていない機能についてです。ニューラルネットワークの層構成を含む、様々なハイパーパラメータの自動チューニング(自動最適化)機能です。

 この「お菓子を認識する」でそれをやってみました。結論から言いますと、これまでの認識率(正答率)は最高で95.2% = 476/500でしたが、この自動チューニングで、97.2% =486/500を出すニューラルネットワークが見つかりました!

 これには、ノートPCを1時間ほど走らせて得られました。6ケースほどの候補をそれぞれ10分程度かけて学習した結果からそれが得られました。実際、ネットワークの層も自動的に下図のように変更されていました!ある一定のポリシーでこの方向へ向かってきたのだと思いますが、詳しいことは、現時点では分かりません。勉強していません。

 ともかく、自分でひとつのNeural Networkを構成すれば、それをベースに自動的に(時間はかかるが)もっと正答率の高いNeural Networkに変えてくれる、これはなかなかのものではないでしょうか。

前編(その2)のネットワーク構造が自動的に変更された
正答率は、前編(その2)の95.2%から97.2%へ向上


この時の学習の状況:前編(その2)の場合とはかなり異なるルートの探索




2017年11月18日土曜日

人工知能でお菓子を認識する(その3)

 本件、前編(その1)と(その2)とも、Windows単体で動くSony Neural Network Consoleを使いました。その後、すぐにクラウド版(ベータ版ですが)が公開されました。Macからも使えます。Macファンとしてはとても嬉しいです。さっそく、試してみました。

クラウド版が使える! Macからも使える!

このクラウド版のいいところを列挙してみます。

  • Windows単体版で作成したプロジェクト(ニューラルネットワークの層構造など)は、そのままクラウドへアップロードして使える。
  • データセット(データの本体のuriとラベルの組み)のアップローダーが備わっており、自動的にデータ本体もアップロードしてくれる。
  • クラウド版の方に本腰をいれているようだ。Windows単体版よりも表示情報が詳しく、GUIも若干充実している。

 一方、おやっ?と思ったのは...

  • Compute Hoursは10時間まで無料で使える、と書いてあるのですが、このCompute Hoursとは何なのか。ログイン状態の経過時間のようです。計算も何もしていないつもりでもカウントされてしまうようです。実際、40分くらいしか実質計算にはかかっていないはずなのに、下図のとおり、すでに6.7時間も使ったことに!ベータ版の無償版だからしかたないのか。

えっ、もう6.7時間も使ったことに...


以下に、Windows単体版での前編(その2)で実施したのと同じ条件で、このクラウド版を使った際の状況を示します。

ラーニングカーブ(経過時間の表示など詳細情報も表示される)

 学習後の評価結果は、(その2)とほぼ同一なので省略しますが、評価結果の詳細を表示してみると、下図のように、入力データ(この例では周波数スペクトル)の中身がより分かりやすくpreview表示されていました。

学習後の評価結果の詳細表示の例(入力データのpreviewもgood)

 また、これはWindows単体版にもあるのですが、学習の履歴も見ることができて便利です。

このプロジェクトの学習履歴


2017年11月16日木曜日

人工知能でお菓子を認識する(その2)

 前編(その1)では、5種類のお菓子などを振った場合の音データそれぞれ100件(1件には、10ms分の、256周波数のスペクトルが格納されている)のTraining用データと、同じく、それぞれ100件のTest用データを使いまいした。その結果、全体の正解率は90.1%でした。

 その際に採用したレイヤーのうちの、ReccurentInput 〜 RecurrentOutputまでをまとめたUnit(ブロック)を使うこともできます。すなわち、このSony Neural Network Consoleには、LSTMをレイヤーとして使えるようになっています。そこで、今回はこれを使ってみました。他のハイパーパラメータも若干修正していますが、結果として、全体の正解率は95.2%まで行きました!(サッポロポテトだけは、若干低い認識率のままでした。といっても、87%の認識率です。)

 以下に、その様子を示します。
今回のLSTM(前回の構成よりもかなり簡単になっている)

ラーニングカーブ(Training Error & Validation Error)

学習後の評価結果(正解率は、全体で95.2%)#拡大してご覧下さい。


2017年11月14日火曜日

人工知能でお菓子を認識する(その1)

 最近の人工知能アプリの開発環境として注目を集めているもののひとつに、Sony Neural Network Consoleがあります。通常のようなプログラミング言語でのコーディングなしに、GUIの操作だけで、各種のNeural Networkを構成して、学習させ、問題を解くことができます。さらに、Neural Networkの層の構成を含めた各種のハイパーパラメータの自動チューニング機能もあります。 

 このSony Neural Networkを使う例題、良くある画像関係のもの多いと思っていましたら、それと違う、時系列データ(ここでは音データ)を扱うものがありました。それは、コンピュータサイエンス&テクノロジの専門雑誌「インタフェース」の2017年12月号に載っていました。この素晴らしい記事を書かれた常磐和宏氏に感謝したいと思います。
 以下は、それに興味を惹かれて、追試行したメモに過ぎませんが、ご参考になるところがあればうれしいです。

解きたい問題
 下図にある5種類のお菓子等を、振って(適当な秒数)、その音で、どのお菓子であるかを認識するというものです。[0]と[3]のデータは、上記雑誌で提供されているものを使いました。一方、[1]と[2]のお菓子は、自分でスーパーへ行って購入し、音データの作成も自分で行いました。また、[4]龍角散飴は雑誌ではやっていないのですが、家にあったので追加してみました!


お菓子と飴の5種類を用意します
(1)音データの準備
 まず、それぞれのお菓子の袋を振って、カサカサという音を20秒くらい録音します。その生データは.wavという拡張子のファイルにします。次に、それにFFTを施し、10行256列の.csvファイルのファイルに分割します。行を時系列とし、列はFFT後の周波数毎のゲイン(dB)とします。これは、10msごとにオーバラップしながら、音を切り取った.csvファイル群になります。[2]とんがりコーンを振った時のカサカサ音の例は以下にあります:
https://www.dropbox.com/s/27wjqxhk6x149xw/fycorn.wav?dl=0
とんがりコーンを振った時の音の例

(2)学習用データと評価用データの準備
 ディープラーニングでは、学習用に大量のデータが必要です。この場合は、幸い、簡単に自動的に、上記の.csvファイルを生成することができます。それらの.csvファイルのそれぞれに、5つのうちのどのお菓子であるかのラベルを付けたものを作ります。今回は、雑誌の例のとおり、学習用と評価用に、それぞれ、お菓子毎に100個のファイルを用意しました。

入力データセットに設定した周波数スペクトルの例

(3)Neural Networkの構成
 この場合は、時系列のデータを学習させます。そのための基本的な構造RNN(Recurrent Neural Networ)のモデルも用意されています。それを使います。適宜、ハイパーパラメータを変更することも可能です。その構成は、図のように全て、GUIで行います。
RNNの層構成

(4)学習と評価の実行
 どのようなNeural Network構造にするか、そして、学習用と評価用のデータセットの場所を指定した後、ボタンを押すと、指定された回数(epochs)だけ学習が行われます。その状況もグラフィックスで見ることができて楽しいです。学習には一定の時間がかかります。それが済んだら、今度は、評価用のボタンで評価を実施します。これは、学習に比べて、非常に短時間ですみます。フォーワード計算だけですから。

ラーニングカーブ(Training Error & Validation Error)

(5)結果
 4つのお菓子を振った結果として、トータルでは、約90%の精度で認識できました。下図にあるように、[1]ベビースターと[2]とんがりコーンは、97%〜99%と高い認識率でしたが、[0]札幌ポテトと[3]かっぱえびせんは、互いにどこか似ているのか、やや認識率が低く、82%〜87%という結果でした。[4]龍角散は88%とまずまず。

学習後の評価結果(クリックして拡大できます)

まとめ
 Deep Learningに関しての基本的なところの一定の理解があれば、このような(多分他の方法では結構むずかしい)問題も、解けてしまいます。すばらしい!と思ったら、中身をさらに調べ、周辺知識も修得する方向に持っていけるのではないでしょうか!

2017年11月12日日曜日

LSTMを用いた電力消費予測の検討

 予測したい対象はたくさんあります。株価、為替、売り上げ、気象、等々がすぐ思い浮かびます。そのなかに、電力消費の予測もあるでしょう。最近は、電力自由化に伴い、電力売買相場もあります。また、電力会社では、従来から設備計画や稼働計画立案のために、電力消費予測は重要と思われます。

 そこで、人工知能で注目されているものの一つ、LSTM(Long Short-Term Memory)でやってみます。LSTMは、時系列を扱うRNN(Recurrent Neural Network)に属します。特に、Long Termつまり、かなり以前のデータも効率的に利用して学習できる点に特徴があります。

 詳しい説明は別途書くとして、以下に結果だけを示します。本学の学内電力消費と、米国のある企業の電力消費の予測結果です。いずれも、下図の赤枠の左側の実測値から、赤枠内を未来予測したものです。

学内電力消費の予測例

米国のある企業の電力消費の予測例

2017年9月21日木曜日

RNN(Recurrent Neural Network)による時系列データ予測の分かりやすい例

RNN(Recurrent Neural Network)を使った時系列データの予測(推定)を理解するための良い例題(アプリ)がGoogleから提供されています。とても参考になるように思います。

https://magenta.tensorflow.org/sketch-rnn-demo

We taught this neural net to draw by training it on millions of doodles collected from the Quick, Draw! game. と書かれています。


以下の例は、「人の手」の簡単なイラストです。これを無数に用意して、RNNに学習させているはずです。RNNの学習とは、「P1, P2, P3, ... , Pn-1」まで描いた次はPnへ行きます、という時系列データセットP = {P1, P2, P3, ... , Pn-1, Pn }を十分多く用意します。そして、このようなデータセット群の全てについて、以下を満たすような一つの近似関数Fを求めることです。
 Pn = F(P1, P2, P3, ... , Pn-1)

十分満足できるようなFに到達するには、多くの学習回数が必要となるでしょう。以下は、そのような学習が済んだRNNを使っているはずです。

[Case1] マウスで、親指から人差し指の途中まで描くと、RNNはうまく、残りの部分を描いてくれました。



[Case2] 今度は、小指から薬指の途中まで描くと、これについてもRNNはうまく、残りの部分を描いてくれました。

[Case3 今度はうまく描けません!親指と人差し指あたりを強調するため、何度も行ったり来たりしたためです。そのような点列のデータは、このRNNは学習していなかった!


2017年9月16日土曜日

チンパンジーと人工知能(Deep Learning)による「じゃんけん」の理解

[追記:2017-9-17]チンパージと人間(または人工知能)とのじゃんけんについて追加しました。
 
 チンパンジーに「じゃんけん」のルールを理解させることに成功した(京都大学にて)とのニュースがありました。

http://www.kyoto-u.ac.jp/ja/research/research_results/2017/documents/170810_1/01.pdf
http://www.kyoto-u.ac.jp/ja/research/research_results/2017/170810_1.html
https://www.youtube.com/watch?v=5qqLKADacOE

 それならば、現在の人工知能Deep Learnig、特にCNN(畳み込みニューラルネットワーク))にも同じことをやらせてみよう、というのが本稿の趣旨です。以下では、私の理解した京都大学での実験をもとにしました。(私の理解に誤りがあるかも知れません。その節はご指摘いただければ幸いです。)



チンパンジーは何を学んだのか
 下図に、チンパンジーの手による「グー」「チョキ」「パー」があります。それぞれ1種類のみです。このうちの異なる2つを並べた画面をみて、どちらが勝ちかをチンパンジーに学ばせます。勝ちの方を正しく答えた(指を指した)場合に、餌をもらえます。


 そのような画面(左右入れ替えも含めて6種類の画面)を、1日に144回(3パタン×48回)学ぶ。それを約100日続けた結果、6種類のどの画面が出ても、正しく答える(指さす)ようになった。
 なお、この1セットの画像以外に、「手の甲とひらを変えた画像のセット」や「人間の手による画像のセット」でも、同様に学習できることが判明したとのこと。

人工知能 CNN君による学習
 結論から言いましょう。CNN(畳み込み層3層+α)では、チンパンジーが学習した6種類の画面に加えて、さらに12種類の画面(合計18種類の画面)を学習しました。これに60エポックを要しました。その学習結果を使って、本来の6種の画面をテストした結果、すべてに対して正解を得ました。(十分に学習が済んでいれば当然そうなります。)下図が、その出力結果図です。ここでのCNNは、Keras on Tensorflowを使って構成しました。


(注)このCNNでは、18画面を学習用データとしました。そのうちの6画面をテスト用にしました。通常の場合は、学習用データをテスト用データは別々に用意しますが、チンパンジーの学習の仕方に合わせるため、このようにしました。

簡単な考察

  • チンパンジーの学習では、学習完了までに、6種のうちのいずれかの1画面×140回×100日 = 14,000回画面を見た。
  • 人工知能CNNでは、学習完了までに、18種類の画面×60回 = 1,080回画面を見た。
  • 単純計算では、(かなり乱暴だが)CNNはチンパンジーよりも、14,000/1,080 = 13倍の効率で学習できたとも言える。
  • チンパンジーは、6種類の画面だけをひたすら学習した。
  • 一方、CNNではこの6種類の画面だけでは、十分に学習することができなかった。以下のようにさらに12種の(元の画像を左右に回転させるなどして得られた画像を編集した)画面を追加して学習することで上記の結果を得た。
  • すなわち、チンパンジーは少ない種類の画面を多くの反復回数をかけて学習した。一方のCNNは、(いくつかの変形を含む)多くの種類の画面を少ない反復回数で学習した。これは、CNNの重要な特性であろう。






チンパンジーと人間の間のじゃんけん

 この京大の研究結果に基づいて、将来的には、チンパンジーと人間(または人工知能CNN君)がじゃんけんすることもありそうです。そこまでは検証できませんので、ここでは、CNN君が、下図のような、チンパンジーと人の手の組み合わせでも難無く学習できることを示しておきます。

 実際に学習した成果(CNN君による判定結果)を示します。チンパンジーの手だけの場合と比べて、特に難しいことではありませんでした。CNN君にとっては。


2017年9月10日日曜日

LSTMによる学内消費電力の予測

 Deep Learningにおいて、CNN(畳み込みニューラルネットワーク)とRNN(再帰型ニューラルネットワーク)はその双璧とも言えよう。ここでは、RNNのうちのLSTM(Long short-term memory)の応用について検討する。

 LSTMと言えば、時系列のデータ。株価、為替、乗客数、売り上げ等々、予測したいものはいくらでもある。ここでは、大学らしいデータでやってみたい。公開されている「KAIT学内電力使用状況」のデータを対象として検討した。Keras(on TensorFlow)を使用した。




簡単な考察
  1. 約1日半の実測データのうちの6割を使って学習。(夏期休業中の金曜と土曜のため、電力消費は少ない。)
  2. ここでの学習とは、時点tでの実測値とそれ以前の連続nステップ(ここではn=2)前のデータから成る順序付きセットを、(t+1)での実測値に結び付けることである。それらの結び付けを全部(可能な限り正確に)反映するマシンLSTM(ニューラルネットワーク)を作成することである。
  3. その学習結果にしたがって予測を行う。上図のとおり、学習が進む(epochが増える)にしたがって、良い予測結果が得られている。
  4. ただし、誤解がありそうである。評価領域での予測は、何もデータを与えずに予測するのではない。あくまで、学習済みLSTMを使って、②で示した時刻tまでの実測値のセットから次のステップ(t+1)での値を予測する。
  5. 今回の時間刻みは30分毎にしてある。したがって、基本的には30分後を予測する。しかし、その予測がかなり妥当であれば、それを元にさらにその先を自動的に予測することも可能かもしれない。
  6. 学習用領域における、学習済みのLSTMを用いた予測結果は、当然、評価領域での予測よりも良好になるはず。

2017年7月26日水曜日

グラフィカルな人工知能(ニューラルネットワーク)作成ツール

 すでに試された方もいるかも知れませんが、私が「日経ソフトウェア 2017年9月号」の記事で、これは!と目にとまったものがあります。Simbrainというソフト、グラフィカルに、通常のコーディング無しに、ニューラルネットワークを構成するもののようです。

 誤差逆伝播(バックプロパゲーション)もできるようです。興味深いです。早速、記事の内容をトレースしてみました。引き続き、記事には載っていないが、非線形分離問題としてポピュラーなXORを構成し、学習させてみました。まだ、全然深く調べていないので、一見うまくいっているようですが、これが正しいネットワークであり、結果も妥当なのがまだ確信は持てません。


グラフィカルに作成したニューラルネットワークで、XORを学習させる

 しかし、人工知能となる(ディープな)ニューラルネットワークをこんなに簡単に構成できて、学習させることができるならば、そのインパクトは大きいのではないでしょうか。今後、さらに調査し、応用を深めたくなります!

2017年7月17日月曜日

マルチコア並列の性能を見る

 学生の皆さんが持っているノートPCですが、マルチコアになっています。それを意識している学生諸君はほとんどいないように思われます。実質4台のCPU(正確には、多くの場合、2コア×2ハイパースレッディング)が載っているのに!

 情報工学応用ユニット1のある実験のある課題では、ここに焦点を当てました。通常のプログラミング言語で、この4台のCPUを使った並列プログラムを書いて動かすことはとても困難です。しかし、Java SE8の並列ストリームとラムダ式を使うと、非常に簡単にそのような並列プログラムを作成し、動かすことができます。

 この実験での課題は、「見出し語が約12,000語の英語辞書」を使って、「約1,000語のミススペル語を正しいスペルに直せ!」という問題です。Windowsの標準機能である「リソースモニタ」を使うと、以下のような綺麗なCPU稼働状況が分かります。解答した学生諸君の中には、もっときれいな(逐次と並列の対比がより明確な)図を提出した人もいます。

[図が小さいので、拡大してご覧下さい]

2017年7月16日日曜日

IT夢コン2017のピア賞 投票快速集計アプリ

 今年も、本学で開催の「IT夢コン2017」の最終選考会が迫ってきました。生徒同士が、互いに発表ポスタを評価して決める「ピア賞」もあります。その投票の集計ですが、当日、スケジュールがタイトであるため、すばやく、確実に行う必要があります。そこで、作成したのが、下図のAndroid用「快速集計アプリ」です。

 以下の画面のデータは、テスト用の架空のデータです。模擬投票の結果は、投票者数=52名、投票総数=133票、第一位は35番の作品、第二位は31番の作品となりました。



 さて、このAndroidアプリ、大した機能はなく、トリビアルな処理に見えます。確かにそうですが、そうでもないところも少しあります。このアプリ設計での留意点を列挙します。


  • このようなユーザインタフェースを持つAndroidアプリの作成は、MIT App Inventorの得意とするところであります。特に、画面タッチ。その効率的開発の恩恵を受けます。
  • 多数のボタンがあります。それを効率良く配置し、ボタンに対する反応(アクション)も効率良く書きたい。
  • 集計中に、不意に中断せざるを得ないかも知れない。中断と再開内部データベースを使って実現する。
  • 集計中に、画面を不意に触れてしまい、カウントがダメになることを防ぎたい。そのために、ボタンの「クリック」ではなく「ロングクリック」による反応を用いる。
  • 来年度も使いたい。また、今年度も直前に何かデータの修正があるかも知れない。したがって、ポスター作品データは、プログラムに組み込むのではなく、テキストファイル(スマホのSDカードに保存)に記載する。
  • 想定投票者50名、投票総数150票で、結果をえるまでに5分と見積もる。上記の「ロングクリック」で6割ほど時間が増すが、確実性を重視します。


2017年7月15日土曜日

スマホでマルチエージェントモデリング!

 社会現象、物理化学現象、生物/生命現象、コンピュータアルゴリズム等をモデル化し、シミュレーションによってその現象を解析したり、予測を行うための手法として、「マルチエージェントモデリング」があります。そのためのソフトウェアはいくつかあるのですが、NetLogo(無償)が非常に有力なものの一つです。NetLogoは昨年から、メニューやテキストに日本語が使えるようになり、いっそう身近なものになりました。

 さらに、すばらしい機能があります。これまでのマルチエージェントモデルはPCの上で動く重たい処理が付きものでした。しかし、ここに来て、スマホでも事実上実行できるようになりました!(正確に言えば)Web版が公開されています。PCには、何も専用ソフトは要らず、ブラウザからNetLogoのソースファイルを指定すれば、スマートフォンの画面でも実行できるのです。もちろん、(画面が小さくちょっとやりにくいが)その場で、NetLogoソースコードも編集できます。

 これで何か新しい方向が生まれそうです。詳しくは言えませんが、例えば、
→「スマホのカメラで現場を撮影する」
→「人工知能による画像解析で被写体の特徴をテキストで得る」
→「マルチエージェントモデルのパラメータにそれ反映させる」
→「その場で、スマホの画面で実行させる」

というような使い方も起こるだろう。

有名な「羊」と「オオカミ」の生存のダイナミクス:Androidスマホでの実行

「環境にどのように影響されるか」の私のモデリング:Androidスマホでの実行