1つのプロジェクトのフレームワーク内で、いくつかのオプションを考慮して、ニューラルネットワークで作業する必要に直面しました。何よりもPyBrainが気に入りました 。 多くの人がその説明を読むことに興味を持つことを願っています。
PyBrainは、さまざまなニューラルネットワーク関連アルゴリズムの学習と実装に最適なPythonライブラリの1つです。 これは、コンパクトなPython構文と、マシンインテリジェンスの分野のさまざまなアルゴリズムの大規模なセットの優れた実装を組み合わせた良い例です。
設計対象:
- 研究者 -さまざまなアルゴリズムを実装するための統一された環境を提供し、多数の異なるライブラリを使用する必要性を排除します。 実装の機能ではなく、アルゴリズム自体に集中できます。
- 学生 -PyBrainを使用すると、宿題、コースプロジェクト、または計算の論文を実装するのに便利です。 アーキテクチャの柔軟性により、さまざまな複雑な方法、構造、およびトポロジを便利に実装できます。
- 講師 -学習機械学習技術は、ライブラリを作成する際の主な目標の1つでした。 著者は、彼らの仕事の結果が有能な学生と専門家の準備に役立つならば、幸せです。
- 開発者はオープンソースプロジェクトですので、新しい開発者はいつでも大歓迎です。
図書館について
PyBrianは、Pythonでさまざまな機械学習アルゴリズムを実装するために設計されたモジュールライブラリです。 その主な目標は、研究者に柔軟で使いやすいと同時に、機械学習、テスト、さまざまなアルゴリズムの有効性を比較する分野のタスクを実現するための強力なツールを提供することです。
PyBrainという名前は英語の頭字語です。Pythonベースの強化学習、人工知能、ニューラルネットワークライブラリです。
1つのサイトで述べたように、 PyBrain-ニューラルネットワーク用のスイスアーミーナイフ (PyBrainは、ニューラルネットワークコンピューティングの分野におけるスイスアーミーナイフです)。
ライブラリはモジュール式の原理に基づいて構築されているため、学生はより複雑なアルゴリズムを実装する必要のある基礎と研究者の両方に使用できます。 使用手順の一般的な構造を次の図に示します。
ライブラリ自体はオープンソース製品であり、1つの注意事項があるプロジェクトで自由に使用できます。科学研究に使用する場合、引用された情報ソースのリストに次の本を追加するよう求められます(人々が行う):
トム・ショール、ジャスティン・バイエル、ダーン・ウィーストラ、サン・イー、マーティン・フェルダー、フランク・ゼンケ、トーマス・リュクスティース、ユルゲン・シュミットフーバー。 PyBrain 掲載先:Journal of Machine Learning Research、2010年。
主な機能
ライブラリの主な機能(バージョン0.3用)は次のとおりです。
- 教師による学習アルゴリズム(教師あり学習)。
- 逆伝播法
- R-Prop (弾性伝播)
- Support-Vector-Machines (サードパーティライブラリLIBSVMへのインターフェイス)
- エボリーノ
- 教師なし学習 (ブラックボックス最適化/進化的
方法)
- K-Meansクラスタリング
- 確率的主成分分析 (PCA / pPCA)
- ハミング空間とユークリッド空間のLSH
- 深い信念のネットワーク
- 強化学習
- コストベース ( 値ベース )
- Q-Learning (許容パスの計算の有無にかかわらず)
- サルサ
- 神経適合Qイテレーション
- ポリシーの勾配
- 強化
- 自然な俳優-評論家
- 研究戦略
- Epsilon-Greedy Exploration (ディスクリート)
- ボルツマン探査 (離散)
- ガウス探査 (連続)
- 状態依存探索 (連続)
- コストベース ( 値ベース )
- ブラックボックス最適化
- 登山
- 粒子群最適化 (PSO)
- 進化 戦略 (ES)
- 共分散行列適応ES (CMA-ES)
- 自然進化戦略 (NES)
- フィットネス期待値最大化(FEM)
- 有限差分勾配降下
- パラメータ探索を伴うポリシー勾配(PGPE)
- 同時摂動確率近似(SPSA)
- 遺伝的アルゴリズム (GA)
- 競争力のある共進化
- ミーム検索 (内部/逆)
- 多基準最適化 / 多目的最適化NSGA-II
ネットワーク
PyBrainは、ライブラリでサポートされるほとんどすべての複雑なアルゴリズムを構築するために使用できるネットワーク構造で動作します。 例は次のとおりです。
- Deep Belief NetworksやRestricted Boltzmann Machines(RBM)などの直接配信ネットワーク
- Long Short-Term Memory (LSTM)アーキテクチャを含むリカレントニューラルネットワーク (RNN)
- 多次元リカレントネットワーク (MDRNN)
- Kohonen Networks / 自己組織化マップ
- 貯水池
- Coscoニューラルネットワーク / 双方向ネットワーク
- 独自の構造のトポロジを作成する
ツール
さらに、関連タスクを実装できるソフトウェアツールがあります。
- チャートの作成/視覚化
- NetCDFサポート
- XMLの書き込み/読み取り
ライブラリのインストール
Pybrainをインストールする前に、作成者は次のライブラリをインストールすることをお勧めします。
Setuptoolsは、新しいライブラリのインストールを大幅に簡素化するPython用のパッケージマネージャーです。 それをインストールするには、 このスクリプトをダウンロードして実行することをお勧めします(python ez_setup.py)。
インストール後、コマンドを使用する機会があります
新しいライブラリをインストールします。easy_install
すぐにそれらを使用し、2つの必要なパッケージをインストールします。
$ easy_install scipy $ easy_install matplotlib
次に、PyBrain自体がインストールされます。
- または、githubでリポジトリを使用します
git clone git://github.com/pybrain/pybrain.git
- または、最新の安定版をこちらからダウンロードしてください 。 そして、標準的な方法でインストールします。
$ python setup.py install
ライブラリの基本
ニューラルネットワーク
2つの入力、3つの隠れ層、1つの出力を持つニューラルネットワークの作成:
>>> from pybrain.tools.shortcuts import buildNetwork >>> net = buildNetwork(2, 3, 1)
その結果、重みのランダムな値で初期化された作成されたニューラル回路は、ネットオブジェクトに配置されます。
アクティベーション機能
アクティベーション関数は次のように定義されます。
net.activate([2, 1])
ネットワークに送信される要素の数は、入力の数と等しくなければなりません。 このメソッドは、現在の回路に1つの出力がある場合は特異な答えを返し、出力が多い場合は配列を返します。
ネットワーク情報の取得
現在のネットワーク構造に関する情報を取得するために、その各要素には名前があります。 この名前は、自動的に指定することも、ネットワークを作成するときに他の基準で指定することもできます。
たとえば、ネットの場合、名前は自動的に与えられます:
>>> net['in'] <LinearLayer 'in'> >>> net['hidden0'] <SigmoidLayer 'hidden0'> >>> net['out'] <LinearLayer 'out'>
非表示のレイヤーには、名前にレイヤー番号が追加された名前が付けられます。
ネットワーク機能
もちろん、ほとんどの場合、作成されたニューラルネットワークにはデフォルト以外の特性が必要です。 これにはさまざまな可能性があります。 たとえば、デフォルトでは、 シグモイドアクティベーション関数を使用して非表示レイヤーが作成され、別のタイプを指定するために、次の定数を使用できます。
- バイアスユニット
- GaussianLayer
- リニアレイヤー
- LSTMLayer
- MDLSTMレイヤー
- シグモイド層
- ソフトマックスレイヤー
- StateDependentLayer
- TanhLayer
>>> from pybrain.structure import TanhLayer >>> net = buildNetwork(2, 3, 1, hiddenclass=<b>TanhLayer</b>) >>> net['hidden0'] <TanhLayer 'hidden0'>
出力層のタイプを指定することもできます。
>>> from pybrain.structure import SoftmaxLayer >>> net = buildNetwork(2, 3, 2, hiddenclass=TanhLayer, outclass=SoftmaxLayer) >>> net.activate((2, 3)) array([ 0.6656323, 0.3343677])
さらに、バイアスを使用できます。
>>> net = buildNetwork(2, 3, 1, bias=True) >>> net['bias'] <BiasUnit 'bias'>
データ処理(DataSetの構築)
作成されたネットワークは、このセクションが作業専用のデータを処理する必要があります。 典型的なデータセットは、入力値と出力値のセットです。 それらを操作するために、PyBrainはpybrain.datasetモジュールを使用し、SupervisedDataSetクラスも後で使用されます。
データ設定
SupervisedDataSetクラスは、一般的な教師のトレーニングに使用されます。 出力と出力の配列をサポートします。 それらのサイズは、クラスのインスタンスを作成するときに設定されます。
レコードビュー:
>>> from pybrain.datasets import SupervisedDataSet >>> ds = SupervisedDataSet(2, 1)
は、2次元の入力データと1次元の出力を格納するデータ構造が作成されていることを意味します。
サンプルを追加する
ニューラルネットワークのトレーニングにおける古典的なタスクは、XOR関数を学習することです。次に、そのようなネットワークの作成に使用されるデータセットを示します。
>>> ds.addSample((0, 0), (0,)) >>> ds.addSample((0, 1), (1,)) >>> ds.addSample((1, 0), (1,)) >>> ds.addSample((1, 1), (0,))
サンプル構造の研究
現在のセットでデータ配列を取得するために、配列を操作するために標準のPython関数を使用することができます。
>>> len(ds)
これは要素の数であるため、4を出力します。
セットの反復は、配列の通常の方法で編成することもできます。
>>> for inpt, target in ds: print inpt, target
... [ 0. 0.] [ 0.] [ 0. 1.] [ 1.] [ 1. 0.] [ 1.] [ 1. 1.] [ 0.]
また、フィールドの各セットには、その名前を使用して直接アクセスできます。
>>> ds['input']
array([[ 0., 0.], [ 0., 1.], [ 1., 0.], [ 1., 1.]])
>>> ds['target']
array([[ 0.], [ 1.], [ 1.], [ 0.]])
サンプルを完全に削除して、サンプルが占有しているメモリを手動で解放することもできます。
>>> ds.clear() >>> ds['input']
array([], shape=(0, 2), dtype=float64)
>>> ds['target']
array([], shape=(0, 1), dtype=float64)
サンプルのネットワークトレーニング
PyBrainはトレーナーの概念を使用して、教師とネットワークを訓練します。 トレーナーは、ネットワークのインスタンスとサンプルのセットのインスタンスを受け取り、結果セットでネットワークをトレーニングします。
典型的な例は逆伝播です。 このアプローチの実装を簡素化するために、PyBrainにはBackpropTrainerクラスがあります。
>>> from pybrain.supervised.trainers import BackpropTrainer
サンプルのトレーニングセット(ds)とターゲットネットワーク(ネット)は、上記の例で既に作成されていますが、これらは結合されます。
>>> net = buildNetwork(2, 3, 1, bias=True, hiddenclass=TanhLayer) >>> trainer = BackpropTrainer(net, ds)
トレーナーはネットワーク構造へのリンクを受け取り、それをトレーニングできます。
>>> trainer.train()
0.31516384514375834
train()メソッドを呼び出すと、トレーニングの1回の反復(時代)が実行され、2次誤差の値(誤差に2倍の比例)が返されます。
各時代のサイクルを整理する必要がない場合は、収束するためのトレーニングネットワークメソッドがあります。
>>> trainer.trainUntilConvergence()
このメソッドは、各時代のエラーの配列を返します。
さまざまなネットワークの実装のその他の例
記事で
トム・ショール、マーティン・フェルダー他 PyBrain、Journal of Machine Learning Research 11(2010)743-746。.matファイルからデータをロードしてネットワークを作成する例を示します。
# Load Data Set. ds = SequentialDataSet.loadFromFile('parity.mat') # Build a recurrent Network. net = buildNetwork(1, 2, 1, bias=True, hiddenclass=TanhLayer, outclass=TanhLayer, recurrent=True) recCon = FullConnection(net['out'], net['hidden0']) net.addRecurrentConnection(recCon) net.sortModules() # Create a trainer for backprop and train the net. trainer = BackpropTrainer(net, ds, learningrate=0.05) trainer.trainEpochs(1000)
いくつかのリンク:
- PyBrainでネットワークを保存して読み込む方法は ?
- PyBrainで独自の構造のネットワークを作成します 。
- PyBrainのネットワークの学習プロセスをどのようにフォローできますか?
- 結果のネットワーク(ノードとアーク)をPyBrainに出力する方法は ?
- PyBrainでトレーニングセットをロードする方法は ?
- 小さな開始方法 、2010年の記事。
- また、2010年から。
おわりに
結論として、このライブラリは非常に良い印象を与え、それを使用するのが便利であり、アルゴリズムの説明はコンパクトですが、コードの荒野でその明確さを失わないことを言いたいと思います。
PSいくつかの用語の名前に修正がある場合、私は聞いて準備ができています、いくつかの翻訳の100%の正確さについては確信がありません、すでに確立された名前があるかもしれません。