2016年12月24日土曜日

クリスマスプレゼントか、NetLogo 6.0リリース(日本語に恩恵)

マルチエージェントモデリングソフトNetLogoですが、2016-12-23ににNetLogo 6.0として正式リリースされました。クリスマスプレゼントのようです!?6.0の詳細は以下にあります。

http://netlogo-users.18673.x6.nabble.com/NetLogo-6-0-released-td5006349.html

いろいろ素晴らしい改善がなされているようですが、私が特に注目したのは、Windows版において、エディタで日本語が使えるようになった!ことです。Macでは従来から何も問題無く日本語は使えました。しかし、学生はWindowsであり、私がコメント付きのNetLogoプログラムソースを渡しても、文字化けしてだめでした。それが解消されました!また、メニューも日本語になっていました。

NetLogo5.3-日本語コメント文字化け

NetLogo6.0-日本語コメントOK!

2016年12月21日水曜日

マルチエージェントでDeep Learningの基礎

私は時々、ちょっとしたITテクニカルな話題(試行試作の経験)を発信しています。そうしていると、教員、学生のみなさんから、時として、「先生、こんなことやられていますよね。僕も、私も、それをこんなところに使ってみたいのですが」という相談に来られる場合があります。いいですね。これはうれしいですね。昨日もありました。

その一環として、話題のDeep Learningの基礎である多層ニューラルネットワーク(バックプロパゲーションあり)についてです。現在、私の3年生ゼミで、マルチエージェントシステムNetLogoによるアプリケーションをやっています。あと3回くらいあります。Deep Learningの基礎をやりたいです。NetLogoに適当な例題ソースがありました。10年前に、NetLogoの創始者Wilensky自身が書いたプログラムです。基礎になることは、10年以上前にあったことを再確認!という感じです。

通常、Deep Learningをやるためのプログラミング言語は、Pythonですね。あるいは、Javaもありますが。マルチエージェントでやっている例は少ないでしょう。しかし、各ノード、そしてリンク(辺)自体もエージェントとして扱うとよいです。特に、リンクの重みが重要ですが、それは、リンクエージェントのひとつのプロパティ(属性)にすると自然に扱えます。

これを3年ゼミでやってみようと思います。しかし、ソースには、僅かな英文コメントしかありません。これじゃちょっと無理なので、全ステートメントに1行づつ日本語コメントを入れたものを作成しました。さらに、最も難解と思われる、バックプロパゲーションの解説図も付けました。何種類かの微分の式です。
(→もしも、この資料を希望される方は、メールでお知らせください。)

XORを認識するニューラルネットワークであることの確認

2016年12月13日火曜日

人工知能・ディープラーニングを学ぶためのメモ

 先日のKAITシンポジウム2016での、インテル野辺氏の基調講演、甲南大学灘本先生の招待講演とも、人工知能/ディープラーニングが話題になっていました。もはや、過去に人工知能関係をやっていたかどうかにかかわらず、広い分野の人々がこれを利用したり、活用を考えたりする時代が来たようです。

 遅れたスタートとなったのですが、私もなんとかやりはじめています。いろいろなレベルがあるでしょう。これまでに、私自身が買って読んだ(完読にいたらないのもありますが)書籍、それと実際にPythonやJavaで試した事項などが増えてきました。放っておくとすぐに忘れます。そこで、簡単にまとめた図を作り、今後をこれをもとに中身を充実させて行きたいと考えました。



 有名なDeep Learning関係のソフト、ツールなどで抜けているものもあります。全部網羅することはできません。自分に何か響いたものをやっています。

2016年12月10日土曜日

KAITシンポジウム2016で「現実感のある」エージェント指向モデリングを展示

以下の「KIAITシンポジウム2016」にて、「現実感のある」エージェント指向モデリングについて、ポスター発表とデモを行いました。
http://www.sympo2016.cs.kanagawa-it.ac.jp

展示したポスターは以下のものです。具体的題材は以下の2つです。
(1)共有資源競合問題(食事する哲学者)- 分散デッドロック検出
(2)指揮者なしの集団の同期動作 - 位相遅延モデルによるホタル群の自律的同期明滅

いずれも、以下の構成になっています。
  • 問題と解法原理の説明
  • NetLogoを使ったエージェント指向シミュレーション
  • Androidスマホ、またはSunSpotを用いた実装方法
  • その実働デモ
本学小宮学長をはじめ、外部からの何人かの来場者に説明することができました。こういう場では、やはりデモが重要だと改めて感じました。本当は(1)の方に力点を置きたかったのですが、問題の意味を説明する必要があり、ちょっと時間がかかる。一方、(2)の方は説明しやすく、すぐにデモに入れるものでした。

(1)のデモでは、5台のAndroid端末が必要です。(私が、一人で10台のAndroid端末をいつも持っている理由がここにもあります!そんなことは説明しませんでしたが。)そして、こういう場では、インターネットを使うと、時として失敗する場合があるが(特に大勢の来場者があってそれらの人がWiFi機器を持っている状態では)、今回は、5台のAndroidの間でローカルネットワークを構成(ごく近接で)することでその心配はほとんどありませんでした。

2016年12月6日火曜日

Web Serviceの続きの続き (分散システムの演習)

 先の記事「Web Serviceの続き」の続きです。以下の図を見ると、なんだ、Android端末が追加されただけじゃないの?と思われるかもしれません。しかし、そこが重要なのです。JavaのJAX-WSを使って生成される一般のWeb Serviceが、別の言語(例えばPython on Ubuntu)でのクライアントからも使えることは非常に大きい。今回は、そこへAndroid端末も参加させたということです。


 
 なお、Android上でWeb serviceのクライアントプログラムを書くには、KSOAP2という軽量ライブラリを使います。スマートフォンという制約されたリソースで動かすために用意されたライブラリです。しかし、それだけに、Python等の場合と比べて、やや記述量が多くなります。例えば、Webサービスに含まれる引数付きのメソッドを呼び出すには、引数の型や値を特別のプロパティに設定してやる必要があります。また、スマートフォンでは非同期処理も重要であり、このライブラリ使用もAsyncTaskとして扱います。

2016年11月27日日曜日

Web Serviceの続き(分散システムの演習)

 「分散システム」授業での演習の続きです。JavaのJAX-WSを利用して、簡単なWeb Serviceを作成、デプロイして提供します。Web Serviceは、本来、OSやプログラミング言語に依存しない汎用性を売り物にしているはずです。ですから、簡単な演習とはいえ、それを実際に体験することは重要ではないでしょうか。



 ということで、以下のように、Mac OS XのJavaで作成し、公開したWeb Service(本質的には、wsdlファイル)を、UbutuのPythonから利用するClientを作って試しました。図のように、PythonのSOAPライブラリであるsudsを用いると、Python Clientプログラムは非常に簡単に書けます。この例では、Web Serviceとして提供される2つのメソッドを、getTime()getSquareRoot(625.0)として、Ubuntu側から呼び出して実行させています。

UbuntuのPythonでwsdlクライアントを実行

2016年11月24日木曜日

Google TranslateをMIT App Inventorで試す

 「グーグル、ニューラル機械翻訳の仕組みをブログで解説」という記事がWebに載っていました。Google Translateですね。それを試すには、すでにAndroidアプリがGoogle Playに公開されていますので、できます。しかし、ここでは、Google Translateを自分のAndroidアプリに組み込んでみます。

 そこで、MIT App Inventorです。ここには、すでに、Yandex Translateという自動翻訳用のブロックがありますので、すぐに使えます。しかし、Google Translateの方は、まだそのようになっていませんので、汎用のWeb_Getをして、返ってくるJSONファイルをデコードする必要があります。でも、JSON処理ブロックはありますので、かなり簡単にできます。

 ということで、さっそく、簡単なAndroidアプリを作成し、両者の翻訳性能(英語→日本語)をためして見ました。以下の図のようになりました。何例かやって見ましたが、圧倒的にGoogle Translateの方が優勢のようです!


 なお、Yandex Translateは無料ですが、Google Translateを上記のように自分のプログラムからAPIを呼び出して使うには、一定の料金がかかります!
 Yandexは、限時点では、仏語やスペイン語などを優先していて、日本語翻訳にはあまり力を入れていなようにも思える。それに対して、Googleの新しい手法では、統合的に日本語も対象となっているようだ。

2016年11月23日水曜日

Creating Web Services with JAX-WS

 「分散システム」授業での簡単な演習という記事を書きましたが、その続きです。
その時は、Java RMI (Remote Method Invocation)をrmiregistry(ネームサーバ)で行いました。今回は、さらに進化した現代のWeb Servicesです。以下のような仕組みです。

Web サービス(菅原健研次「はじめての分散処理システム」より引用)
 
授業でこの演習(簡単な例題で動作を確認)したいのですが、WSDLでの記述やSOAPメッセージの作成はそれなりに面倒です。それを大幅に緩和させて、しかも、Web Servicesの仕組みの本質を体験するには、JAX-WS web serviceというJava標準ライブラリを利用すれば良いようです。これで演習をやります。さらに、以下のこともできそうです!

  • JAX-WSでパブリシュしたWeb serviceに対して自動されたWSDLから、wsimport(jdkに標準付属)によって自動生成されたstub相当のプログラムを使って、クライアント側のプログラムを作成する。
  • Eclipseに組み込まれているTCP/IP Monitorを利用して、SOAPメッセージを追跡する。(ただし、この場合は、クライアントのポートをこのMonitorサーバのポートに変更する。すると、このMonitorから本来のクライアントのポートへ転送されサーバへ行く。)
  • 一例として、Java以外の例えば、Rubyでもクライアントを作成して、このWeb Serviceを利用してみる。Web2.0のもと、Web Serviceは、言語やOSに依存しません!
  • なお、ここではUDDIは省略。たくさんのWeb Sericesを生成した場合はUDDIへ登録することになるが...

-------------上図の補足---------------------------------------------------------
[1]機能
 ●人手を介さず、プログラムが自動的に協調
 ●高度なユーザリクエストを処理
[2] 構成要素
 ●アプリケーションサーバ
 ●Webサービスサーバ
 ●サービス仲介サーバ
[3] XML (eXtensible Markup Language)
 ●プログラムが、Webページの要素の意味に基づいた処理できるようにする。
[4] WSDL (Web Service Description Language)
 ●XMLベースで、Webサービスの仕様を記述する。
[5] SOAP (Simple Object Access Protocol)
 ●メッセージはXMLで記述、上記3サーバ間のメッセージ交換用プロトコル
[6] UUDI (Universal Description, Discovery and Integration)
 ●Webサービスの登録、問い合わせ、提供のためのプロトコル

2016年11月22日火曜日

日経ソフトウェア(2017年1月号)にもTensorFlow

 日経ソフトウェア(2017年1月号)、9ページという短い記事ではありますが、TensorFlowMNIST(定番の手書き数字認識)をやっているではありませんか!
人工知能(ディープラーニング)がこんなに身近で、手軽に使える時代になってしまいました。教員もうかうかできません!

TensorFlowはすぐ使えるよ、という日経ソフトウェアの記事9ページ分

 ディープラーニングでMNISTを高い精度で認識するには、多層構成の畳み込みニューラルネットワークを構成する必要があり、バックプロパゲーションでの全体の誤差関数の偏微分も効率よく計算しないといけない。TensorFlowは、そういうことを全部(ではないにしてもかなりを)受け持っているのだからこういう状況になる。

 しかし、使いこなすのはそんなに容易ではない。基礎知識がないとできない。あまりうかれていないで、地に足をつけて望む、という昔からの鉄則も心がけたい。


MIT App Inventorと人工知能(ディープラーニング)

 MIT App Inventor for Androidは、現在も進化し続けています。そのひとつとして、このサービスを新たな観点から進展させるサイトThunkable.comがあります。ここでは、いち早く、人工知能」というメニューを設置し、MicrosoftのEmotion RecognizerとImage Recognizerを使うためのブロックを提供しています。ディープラーニングに基づく画像認識ですね。


Microsoftの画像認識用のブロック(左メニューの下部)

これを利用すれば、以下のようなアプリを、App Inventorのみですぐに作れます。下図の右側の画像認識結果として英文説明が返ってきますが、自動的に日本語に翻訳もしています。この自動翻訳ブロックも上記メニューから利用できます。(英語→日本語変換はかなり難しいようです!?)

感情(左)と物(右)の自動認識結果