Theano(テアノ)とは、Python用数値計算ライブラリです。多次元配列を効率的に使用する数式について定義/最適化/評価でき、ディープラーニング計算処理によく利用されます。

オープンソースのAI・人工知能/Theanoとは

Theano(テアノ)とは、Python用数値計算ライブラリです。多次元配列を効率的に使用する数式について定義/最適化/評価でき、ディープラーニング計算処理によく利用されます。

Theano(テアノ)とは、Python用数値計算ライブラリです。多次元配列を効率的に使用する数式について定義/最適化/評価でき、ディープラーニング計算処理によく利用されます。

目次

「Theano」基本情報
・概要
・主な特徴
・同様製品
・ライセンス情報
・ダウンロード

ざっくりわかる「Theano」
第1回 Theanoとは(入門編)
  ・参考サイト(1) Theano解説
  ・参考サイト(2) sage/Sageノートブックを使ったTheano入門
  ・参考サイト(3) Theano入門
第2回 Theanoのインストール
  ・Linux(Ubuntu)編
  ・Windows編
  ・Mac編
  ・クラウド(AWS)編
  ・Docker編
第3回 Theanoのチュートリアル
  ・Theanoの基本的な使い方
  ・チュートリアル基礎知識
  ・オフィシャルサイト チュートリアル(英語版)
  ・チュートリアル「Derivatives in Theano」
  ・チュートリアル「Baby Steps - Algebra」
  ・チュートリアル「LSTM Networks for Sentiment Analysis」
第4回 TheanoのPythonプログラミング
  ・MNIST手書き文字認識
  ・MNISTの手書き数字認識
  ・自己符号化器
  ・積層自己符号化器
  ・RNN(再帰型ニューラルネットワーク)実装
第5回 Theanoベースラッパーライブラリ「Keras」とは
  ・「Keras」概要
  ・「Keras」の主な特徴

TOPに戻る

「Theano」基本情報

概要

基本説明

Theanoは、ディープラーニングを実装したライブラリではなく、Python用数値計算ライブラリです。「コンピュータ代数システム」と「最適化コンパイラ」の機能を有しています。

数学的表現(多次元配列など)を持つ数式に対して定義/最適化/評価を行います。PythonでTheanoの式を構築するプログラムを記述します。

Pythonにおける標準的数値計算ライブラリ「Numpy」では「計算手続き」を記述するのに対して、「Theano」では「数式そのもの」を記述します。そのため、計算対象となる行列などのプログラム内での処理に手間をかける必要がありません。

経緯

Theanoは、モントリオール大学のBengio教授の研究室で開発されています。

この研究室はディープラーニングを研究対象としているため、ディープラーニング分野への応用を強く意識した設計になっています。

主な特徴

実行時の最適化コンパイル(C++コード生成)

Theanoは、実行時に「動的C++コード生成」と「コンパイル」を行います。

この処理により、Pythonコードよりも遥かに高速なC++コードに匹敵する処理速度を実現します。

コンパイラ

最適化コンパイルは、特に大規模で複雑な数学的表現に有用です。

Theanoコンパイラは、さまざまな最適化を適用します。次のような処理を行います。
・GPU使用対応
・定数折り畳み
・類似部分グラフのマージ(冗長な計算を避ける)
・算術簡素化
・効率的な行列/ベクトル関数群操作
・メモリエイリアシング
・要素単位部分式のループ融合
・数値的安定性の改善 など

GPUサポートによる高速化

TheanoはGPU能力を使用することで、CPU上での処理に比べて遥かに高速化できます。少しのコード変更でGPUに対応できます。

GPUの使用のために、CUDA(Compute Unified Device Architecture)を利用します。

高速性

ベンチマークにおいて「TheanoはNumpyより1.8倍高速」「TheanoはMatlabより1.6倍高速」「Theano(GPU)はNumpy(CPU)より11倍高速」などの結果も出ています。

解析的微分サポート

Theanoの解析的微分サポート機能で「数式そのものを記述することにより微分計算を解析的に実行できる」という点が大きな特徴です。

ディープラーニング処理では微分を多用するため、「微分の結果を自分で解く必要がない」のは大きなメリットです。また、「勾配法(関数の勾配に関する情報を解の探索に用いるアルゴリズム)」「非線形関数」などに対しても有用です。

煩わしい計算処理から解放されるため、スピーディーに自分が思い描く多層ニューラルネットワークを構築できます。

ディープラーニング対応関数

ディープラーニングでよく使用される関数がサポートされています。

テスト(自己検証)機能

エラーの多くの種類を検出し診断できます。

同様製品

同様な機能を提供する製品として、次のようなものがあります。

オープンソース製品:「Numpy」「Pylearn2」「PyML」「PyBrain」など。

ライセンス情報

Theanoはオープンソースプロジェクトです。ライセンスについては以下のページを参照ください。
→LICENSE

ダウンロード

ダウンロードページ

TOPに戻る

ざっくりわかる「Theano」

第1回 Theanoとは(入門編)

Theanoの概要について解説している参考となるサイトを紹介します。

参考サイト(1) Theano解説

ポイント

Theanoの「概要」や「使い勝手」について紹介しています。簡単なコードについての解説もあります。

テーマ

・実行時におけるC++コードの生成とコンパイル
・メモ

ページリンク

→Hatena::Diary →Risky Dune →Theano解説

参考サイト(2) sage/Sageノートブックを使ったTheano入門

ポイント

Theanoの「インストール手順」「簡単な使い方」などについて紹介しています。「共有変数」や「自動微分」について解説されています。

テーマ

・theanoの参考サイト
・theanoのインストール
・Theanoの使い方
・必要なライブラリのimport
・変数宣言
・テンソル
・シグモイド関数の例
・共有変数
・線形回帰モデルの例
・Theanoの自動微分
・例1 2次関数
・例3 指数関数
・例4 多項式
・例6 偏微分

ページリンク

→PUKIWIKI →sage/Sageノートブックを使ったTheano入門

参考サイト(3) Theano入門

ポイント

Theanoについて非常に細かく解説されています。技術リファレンスとして参照できます。
「Restricted Boltzmann Machine」の実装例を解説しています。

テーマ

・実行環境
・ソースコード
・Theano関数の生成
・シンボルの生成と式の定義
・関数の生成
・微分
・微分の計算
・定数の指定
・共有変数
・共有変数の生成
・共有変数の参照
・インデックスによる参照
・共有変数の更新
・乱数の使用
・Restricted Boltzmann Machine (RBM) の説明
・RBMの確率分布
・Energy-based modelの勾配計算
・Contrastive divergence (CD) algorithm
・RBMの実装
・インターフェース
・学習ループ
・Theano関数の生成の準備
・Gibbsサンプリング
・コスト関数の計算
・パラメータ更新
・Theano関数の生成
・呼び出し側の関数
・実行結果
・まとめ

ページリンク

→(株)知能情報システム →技術情報 →Theano 入門

TOPに戻る

第2回 Theanoのインストール

環境別のTheanoインストール方法について紹介します。

Linux(Ubuntu)編

【ポイント】

TheanoをUbuntu環境へインストールする方法を紹介しています。

「Theano」+「pylearn2のgpgpu環境」を導入しています。

【対象環境】

・OS=ubuntu14.04LTS
・GPU=GeForce GTX 970

【インストール手順】

・CUDA入れる
・theanoでgpu設定
・Anaconda入れる

【ページリンク】

→Hatena Blog →備忘録とか日常とか →ubuntu14.04 theanoとかgpgpu環境構築メモ

Windows編

【ポイント】

TheanoをWindows環境へインストールする方法を紹介しています。

「CPUとGPUのパフォーマンス比較」で、GPUの場合、約12倍高速化されたとしています。

【対象環境】

・OS=Windows
・GPU=GeForce GTX 760

【インストール手順】

・Visual Studio Community 2013をインストール
・CUDA Toolkitをインストール
・Pythonをインストール
・MinGWをインストール
・Cygwinをインストール
・Python distutilsの修正
・PyCUDAをインストール
・Theanoをインストール
・Theanoの動作確認
・CPUとGPUのパフォーマンス比較

【ページリンク】

→Hatena Blog →人工知能に関する断創録 →TheanoをWindowsにインストール

Mac編

【ポイント】

TheanoをMac環境へインストールする方法を紹介しています。

はまりポイントについての注意点もあります。

【対象環境】

・OS=Mac OS X 10.10.4

【インストール手順】

1. pyenvをインストールする
・pyenvとは?
・手順
2. pyenv経由でanacondaをインストールする
・anacondaとは?
・手順
3. pip経由でtheanoをインストールする
・手順

【ページリンク】

→Qiita →TheanoをMac OS X 10.10にインストールする方法 (pyenv, anacondaを使用)

クラウド(AWS)編

【ポイント】

TheanoをAWS環境へインストールする方法を紹介しています。

クラウドの場合は、お手軽に高性能Linuxマシンを使用できるようになります。

【対象環境】

・OS=Ubuntu14.04(64-bit)

【インストール手順】

1. AWSでDeepLearning用マシンを用意する
1.1. インスタンスの要件
1.2. セキュリティグループの設定
1.3. Elastic IP の設定
1.4. インスタンスにSSH接続
2. GPUを使えるようにする
2.1. ドライバのインストール
2.2. CUDA-toolkitのインストール
2.3. cuDNNのインストール
3. Python関連をインストール
3.1. Anacondaをインストール
3.2. Theanoをインストール
3.3. openCVをインストール
4. GPUの動作確認
5. セットアップ完了

【ページリンク】

→Qiita →AWS(Ubuntu14.04)をDeepLearning用にセットアップする(CUDA, cuDNNをインストール)

Docker編

【ポイント】

オフィシャルのDockerファイルが用意されています。

【ページリンク】

オフィシャルサイトのインストール手順です。
→Theano →Installing Theano

Dockerファイル「Theano(CPU版)」です。
→Docker Hub →kaixhin/theano

Dockerファイル「Theano(CUDA版)」です。
→Docker Hub →kaixhin/cuda-theano

TOPに戻る

第3回 Theanoのチュートリアル

数多く用意されているチュートリアルの使い方や解説について紹介します。

Theanoの基本的な使い方

【ポイント】

Theanoの基本的な使い方についてまとめられています。

【解説テーマ】

・事前準備
・NumPyのおさらい
・基本的な使い方
  1.シンボル (変数) の宣言
  2.数式の定義
  3.関数の生成
  4.Tips
・微分の計算
・tensorのメソッド
・共有変数
・応用例:ロジスティック回帰

【ページリンク】

→NANA-KOROBI →Theano -基本編-

チュートリアル基礎知識

【ポイント】

Theanoチュートリアルを行なうための準備方法、基礎知識、簡単な使い方についてまとめられています。

【解説テーマ】

・Theanoの超簡略チュートリアル
・まず常にImportしておく3つ
・これだけ知っておけば概ね大丈夫
  ・変数(シンボル)の話
  ・シンボルの演算結果はシンボルである
  ・function: 関数周り
  ・T.grad: 微分周り
  ・shared: 共有変数
  ・T.gradと共有変数とupdates: 典型的な勾配法の実装パターン
・ロジスティック回帰の実装

【ページリンク】

→Qiita →Theano の 基本メモ

オフィシャルサイト チュートリアル(英語版)

【ポイント】

Theanoオフィシャルサイトには多くのチュートリアルが登録されています。

【ページリンク】

→Theano →Docs →Tutorial

チュートリアル「Derivatives in Theano」

【ポイント】

「Theano 0.8.0: Tutorial: Derivatives in Theano」での「導関数」についての解説です。

【解説テーマ】

・勾配を計算する
・ヤコビアン (Jacobian) を計算する
・Hessian(ヘッセ行列)を計算する
・Jacobian times a Vector
  ・R-operator
  ・L-operator
・Hessian times a Vector
・Final Pointers

【ページリンク】

→MXNet →Theano →Theano 0.8.0: Tutorial: Theano における導関数

チュートリアル「Baby Steps - Algebra」

【ポイント】

「Theano 0.8.0: Tutorial: Baby Steps – Algebra」についての解説です。

【解説テーマ】

・2つのスカラを加算する
・2つの行列を加算する

【ページリンク】

→MXNet →Theano →Theano 0.8.0: Tutorial: 最初の一歩 – 代数

チュートリアル「LSTM Networks for Sentiment Analysis」

【ポイント】

チュートリアルコードについてコードリーディングを行っています。

【解説テーマ】

・訓練データの分類
・コードリーディング
  ・imdb.py
  ・lstm.py
・メインの関数
  ・train_lstm()
・その他ちょっと知っておくと良かった関数
  ・build_model()
  ・init_tparams()
  ・init_params()
  ・pred_error(), pred_probs()
  ・sgd(), adadelta(), rmsprop()
  ・param_init_lstm(), lstm_layer()
  ・dropout_layer()
・構築済みモデルの中身に何入っているか

【ページリンク】

→Qiita →TheanoのLSTM Tutorialで何やっているのかコードリーディングする

TOPに戻る

第4回 TheanoのPythonプログラミング

Theanoを使用したPythonプログラミング実装例を紹介します。

MNIST手書き文字認識

【ポイント】

Theanoを使った畳み込みニューラルネットワーク(CNN)の実装についての解説です。

「Deep Learning Tutorial」に沿って、LeNetをベースにMNISTの手書き文字認識を行っています。

【解説テーマ】

・LeNet
・実装
・畳み込み層
・活性化関数
・プーリング層
・全結合層
・ロス関数
・LeNet
・データセット
・層の定義
・学習(評価)

【ページリンク】

→Qiita →Theanoを使ってdeep learningしてみた

MNISTの手書き数字認識

【ポイント】

「Deep Learning Tutorial」の畳み込みニューラルネットワーク実装として、MNISTの手書き数字認識実装を行っています。

【解説テーマ】

・畳み込みニューラルネットワーク
・畳み込み層
・プーリング層
・LeNetConvPoolLayerクラス
・2つめの畳み込み層とプーリング層
・最後の多層パーセプトロン
・確率的勾配降下法によるモデル訓練
・実行時間の計測
・フィルタと畳み込み層の出力の可視化

【ページリンク】

→Hatena Blog →人工知能に関する断創録 →Theanoによる畳み込みニューラルネットワークの実装 (1)

自己符号化器

【ポイント】

Theanoによる「自己符号化器」実装をまとめられています。

「自己符号化器(オートエンコーダ)」とは、機械学習において、ニューラルネットワークを使用した次元圧縮のためのアルゴリズムのことです。情報量を小さくした特徴表現を獲得するために使用されます。

【解説テーマ】

・自己符号化器
・重み共有の実装
・符号化・復号化処理の実装
・交差エントロピー誤差関数の実装
・モデル学習の実装
・実験結果
・重みの可視化
・入力画像の再構築

【ページリンク】

→Hatena Blog →人工知能に関する断創録 →Theanoによる自己符号化器の実装

積層自己符号化器

【ポイント】

積層自己符号化器の実装について解説しています。

「積層自己符号化器(ディープ・オートエンコーダ)」とは、2層以上の中間層を構築する方法です。「中間層1層のみで作る」→「出力層を取り除く」→「中間層を入力層と見なして、もう1層積み上げる」の手順を繰り返して構築します。

【解説テーマ】

・積層自己符号化器の2つの側面
・ネットワークの構成・重みの共有
・pre-training関数の作成
・fine-tuning関数の作成
・積層自己符号化器の訓練と評価
・ネットワークの構築
・pre-training
・fine-tuning

【ページリンク】

→Hatena Blog →人工知能に関する断創録 →Theanoによる積層自己符号化器の実装

RNN(再帰型ニューラルネットワーク)実装

【ポイント】

Theanoチュートリアル「Recurrent Neural Networks Tutorial, Part 2 – Implementing a RNN with Python, Numpy and Theano」に沿って、RNN(再帰型ニューラルネットワーク)実装方法について解説しています。

【解説テーマ】

・言語モデル
・データの訓練と前処理
1. テキストをトークン化する
2. 稀な単語を取り除く
3. Prepend special start and end tokens
4. 訓練データ行列の構築
・RNN を構築する
・初期化
・フォワード・プロパゲーション (Forward Propagation)
・損失を計算する
・SGD と Backpropagation Through Time (BPTT) により RNN を訓練する
・勾配チェック
・SGD 実装
・ネットワークを Theano と GPU で訓練する
・テキストを生成する

【ページリンク】

→クラスキャット →RNN →Recurrent Neural Networks (2) – Python, Numpy と Theano による RNN の実装 (翻訳/要約)

TOPに戻る

第5回 Theanoベースラッパーライブラリ「Keras」とは

「Keras」の概要について紹介します。

「Keras」概要

Keras(ケラス)とは、高水準ニューラルネットワークライブラリです。

Python実装で、「Theano」または「TensorFlow」上で動作します。

コンパクトなコーディングにより、迅速な実験を可能にすることを重点に設計されています。

【「Theano」or「TensorFlow」】

Kerasは、バックエンドとして「Theano」と「Tensorflow」を選択して使用できるラッパーライブラリです。

もともとは、バックエンドテンソル計算ライブラリとして「Theano」のみを採用していたのですが、「TensorFlow」も選択できるようになりました。

「Theano」「Tensorflow」はKerasフロントから完全に隠蔽されています。そのため、プログラムの変更を必要とせずに、「Theano」と「Tensorflow」の切り替えを行えます。

「Keras」の主な特徴

【コンパクトなコーディング】

Kerasでは、処理を直感的にコンパクトに記述できます。

入力層から出力層への処理の流れ通り(ネットワーク図に描かれる順番通り)に、必要なノード定義や活性化関数を定義して、ネットワークを構成できます。さまざまな深層学習アルゴリズム表現が可能です。

「Theanoによる実装」と比べて、「Kerasによる実装」は、大幅にシンプルに記述できます。冗長要素を排除できるため、「Theanoでは数十行必要な処理」を「Kerasでは数行」で記述できるパターンもあります。

【Python実装】

モデルはPythonコードで記述します。別個の宣言形式モデル設定ファイルは必要ありません。

容易なデバッグと拡張が可能です。

【対応ニューラルネットワーク】

以下の2つのニューラルネットワークをサポートしています。
・畳み込みニューラルネットワーク (CNN:Convolutional Neural Networks)
・再帰型ニューラルネットワーク(RNN:Recurrent Neural Network)」

これらの2つの組み合わせもサポートします。

【2種類のモデル】

Kerasは、2種類の方法でディープラニング構造を記述できます。
・「Sequential」=層をシンプルに重ねていく構造に適しています
・「Functional」=複雑なモデル(複数出力、有向非巡回グラフなど)に適しています

【モデルのモジュール性】

「ニューラルネットワーク層」「損失関数」「最適化」「初期化」「活性化関数」「正規化」などの各機能は、それぞれ完全に独立したモジュールになっています。モデル作成時に結合して利用できます。

【モデルの最小主義(ミニマリズム)】

それぞれのモジュールは、短くシンプルに構成されています。ブラックボックス化されている部分はありません。

【拡張性】

新しいモジュールを追加する場合には、クラス/関数として、簡単に追加できます。

既存モジュールには多くの実装例があるため、活用しやすくなっています。

【CPU/GPUに対応】

CPUとGPUに対応しています。

参考元サイト

・Keras Documentation
・Hatena Blog →人工知能に関する断創録 →深層学習ライブラリ Keras
・Hatena Blog →amacbee's blog →Python製深層学習ライブラリ「Keras」の紹介 (with TensorFlow)
・VIZASQ TECKBLOG →エンジニア勉強会でChainerとKerasの比較をしてみました
・Qiita →Deep LearningライブラリKerasとKeras.jsの紹介
・クラスキャット →Keras →Keras: Theano と TensorFlow のための深層学習ライブラリ

TOPに戻る

※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。

Theano最新TOPICS

最新情報はありません。

Theano最新CLOSEUPコラム

無料資料プレゼント

フォレスターによる調査レポート「サービスとしてのデータベース (2017 年第 2 四半期)」AWS社提供

講演資料を見るには、 プライバシーポリシーに同意して、送付先メールアドレスをご入力しご請求ください。

またご入力いただきました情報は、当該資料の作成・提供企業とも共有させていただき、当社及び各社のサービス、製品、セミナー、イベントなどのご案内に使用させていただきます。

本資料を見るには次の画面でアンケートに回答していただく必要があります。



  • オープソース書籍(サイド)
  • OSSNEWSに広告を掲載しませんか?

facebook

twitter