人工知能(Artificial Intelligence)の進歩は著しく,ニュースなどでも頻繁に取り上げられており,Google社の開発した「AlphaGo」がプロの囲碁棋士に勝利したことなどは広く報じられました。人工知能の進歩で人間が仕事を失ってしまうのではないか,などと悲観的な話も聞こえてきますが,とても便利な技術なので,これから利用場面が広がっていくことは間違いありません。

 人工知能の基本技術はニューラルネットです。ニューラルネットの特徴は,問題解決に向けて,多数のデータをもとに,自分自身を変えていくことが可能な点にあります(だと思っています)。ニューラルネットが自分自身を変えていくことは「学習」と呼ばれており,複雑なニューラルネットを使った場合は特にディープラーニングと呼ばれているようです。
 ニューラルネットは人間の脳を構成するニューロンの集合体を模したモデルで,言ってみれば,人間の脳をシミュレートしたものです。生物的な面白さがあるのかと思って高校生の頃に少し勉強してみたのですが,フタを開けてみれば完全な数学の世界であり,内容も大学レベルで理解困難なものばかりだったため,諦めてしまった記憶があります。
 そんなニューラルネットですが,最近ではオープンソースのライブラリもたくさん出てきており,簡単に扱えるようになってきています。
 ここでは100% Javaで書かれたオープンソースのライブラリであるdeeplearning4jについて紹介していきます。

インストール方法

 deeplearning4jは依存ライブラリが多いため,Mavenで管理するのが一番楽です。
 新規のMavenプロジェクトを作成し,pom.xmlに以下の依存情報を追加していきます。
 Mavenプロジェクトは何で管理しても構いませんが,個人的にはEclipse(日本語版ならばPleiades)を使うのが簡単ではないかと思っています。

<dependencies>
<dependency>
  <groupId>org.nd4j</groupId>
  <artifactId>nd4j-native-platform</artifactId>
  <version>0.9.1</version>
</dependency>
<dependency>
  <groupId>org.deeplearning4j</groupId>
  <artifactId>deeplearning4j-core</artifactId>
  <version>0.9.1</version>
</dependency>
<dependency>
  <groupId>org.datavec</groupId>
  <artifactId>datavec-api</artifactId>
  <version>0.9.1</version>
</dependency>
</dependencies>

 環境でも変わってくると思いますが,大量のライブラリをダウンロードするため,ビルドに1時間くらいを要することもあります。作業は余裕を持って始めましょう。

基本的な構造

 学習をするプログラムの基本的な構造は,次のようなものになります。

  MultiLayerNetwork model = new MultiLayerNetwork(conf);
  DataSet train = ...;

  model.fit(train);

 作成したニューラルネットに,学習用のデータを適用するのみです。
 ほとんどの設定は,ニューラルネットを作成するときや,学習用のデータを用意するときに行います。

 学習したニューラルネットを使うときは,次のようにします。

  MultiLayerNetwork network = ...; // 学習済みのニューラルネットを設定
  DataSet dataset = ...; // ニューラルネットにかけるデータを設定

  INDArray out = network.output(dataset);
  // 結果の配列(行列)が返される
  int[] predicts = network.predict(dataset);
  // 結果に対応するラベル値が返される (outputの便利版)

 これだけなのかと思うかもしれませんが,ニューラルネットで本当に大変なのは,いかに学習効率を上げるか,どのような構造や設定にするか,というところです。
 それらについては,また別の機会ということにします(自分自身にも分からないところが多いので・・・)。