Torchは、オープンソースの機械学習ライブラリ、科学計算フレームワーク、およびLuaベースのスクリプト言語です。[ 3 ]これは、Cで実装された深層学習アルゴリズムへのLuaJITインターフェースを提供します。これはIdiap Research Instituteによって作成されました。Torch の開発は 2017 年に、ライブラリをPythonに移植したPyTorchに移行しました。[ 4 ] [ 5 ] [ 6 ]
Torch のコア パッケージは です。これは、インデックス付け、スライス、転置、型変換、サイズ変更、ストレージの共有、クローンなどの基本的なルーチンをサポートする、torch柔軟な N 次元配列またはTensor をmax提供します。このオブジェクトは他のほとんどのパッケージで使用されるため、ライブラリのコア オブジェクトを形成します。Tensor は、min、 、などの数学演算、一様分布、正規分布、多項分布sumなどの統計分布、およびドット積、行列とベクトルの乗算、行列と行列の乗算、行列の積などの基本的な線形代数サブルーチン(BLAS)演算もサポートしています。
以下は、REPLインタープリタを介してtorchを使用する例です。
> a = torch.randn ( 3 , 4 )> = a - 0.2381 - 0.3401 - 1.7844 - 0.2615 0.1411 1.6249 0.1708 0.8299 - 1.0434 2.2291 1.0525 0.8465 [ torch . DoubleTensor of dimension 3 x4 ]> a [ 1 ][ 2 ] - 0.34010116549482 > a : narrow ( 1 , 1 , 2 ) - 0.2381 - 0.3401 - 1.7844 - 0.2615 0.1411 1.6249 0.1708 0.8299 [ torch . DoubleTensor of dimension 2 x4 ]> a : index ( 1 , torch . LongTensor { 1 , 2 }) - 0.2381 - 0.3401 - 1.7844 - 0.2615 0.1411 1.6249 0.1708 0.8299 [ 2 x 4次元のtorch . DoubleTensor ]> a :分() - 1.7844365427828このtorchパッケージは、パッケージ全体で使用されるさまざまな便利な関数を提供することで、オブジェクト指向プログラミングとシリアライゼーションを簡素化します。この関数は、オブジェクトファクトリ(クラスtorch.class(classname, parentclass))を作成するために使用できます。コンストラクタが呼び出されると、torch は Luaテーブルを初期化し、ユーザー定義のメタテーブルで設定します。これにより、テーブルはオブジェクトになります。
torchファクトリで作成されたオブジェクトも、LuaコルーチンやLuaユーザーデータなど、シリアライズできないオブジェクトへの参照が含まれていない限り、シリアライズできます。ただし、ユーザーデータはread()、メソッドを提供するテーブル(またはメタテーブル)でラップされている場合はシリアライズできます write()。
このパッケージはニューラルネットワークのnn構築に使用されます。共通のインターフェースを共有するモジュールオブジェクトに分割されています。モジュールには、それぞれフィードフォワードとバックプロパゲーションを可能にするメソッドがあります。モジュールは、などのモジュールコンポジットを使用して結合し、タスクに合わせた複雑なグラフを作成できます。などのより単純なモジュールは、基本コンポーネントモジュールを構成します。このモジュールインターフェースは、一次自動勾配微分を提供します。以下は、モジュールを使用して多層パーセプトロンを構築する使用例です。Moduleforward()backward()SequentialParallelConcatLinearTanhMax
> mlp = nn.Sequential ( ) > mlp : add ( nn.Linear ( 10 , 25 ) ) -- 10個の入力、25個の隠れユニット> mlp : add ( nn.Tanh ( ) ) --双曲線正接伝達関数> mlp : add ( nn.Linear ( 25 , 1 ) ) -- 1個の出力> = mlp : forward ( torch.randn ( 10 ) ) - 0.1815 [ torch.Tensor of dimension 1 ]損失関数は、のサブクラスとして実装されておりCriterion、 と類似したインターフェースを持っていますModule。また、損失と勾配の逆伝播をそれぞれ計算するための メソッドforward()とメソッドも備えています。基準は、古典的なタスクでニューラルネットワークをトレーニングするのに役立ちます。一般的な基準としては、 に実装されている平均二乗誤差基準と、に実装されている交差エントロピー基準があります。以下は、入力テンソル、スカラー を持つターゲットテンソルでモジュールをトレーニングするために繰り返し呼び出すことができる Lua 関数の例です。 backward()MSECriterionClassNLLCriterionmlpxylearningRate
function gradUpdate ( mlp , x , y , learningRate ) local criterion = nn . ClassNLLCriterion () local pred = mlp : forward ( x ) local err = criterion : forward ( pred , y ); mlp : zeroGradParameters (); local t = criterion : backward ( pred , y ); mlp : backward ( x , t ); mlp : updateParameters ( learningRate ); endまた、確率的勾配降下法StochasticGradientを使用してニューラルネットワークをトレーニングするためのクラスも用意されていますが、このパッケージには、運動量や重み減衰正則化など、この点に関してさらに多くのオプションが用意されています。optim
上記の公式パッケージ以外にも、Torch で使用されるパッケージが多数あります。これらは torch チートシートに記載されています。[ 7 ]これらの追加パッケージは、並列処理、非同期入出力、画像処理など、幅広いユーティリティを提供します。これらは、Torch ディストリビューションにも含まれている Lua パッケージマネージャであるLuaRocksを使用してインストールできます。
Torch は Facebook AI Research Group [ 8 ] 、IBM [ 9 ] 、 Yandex [ 10 ]、およびIdiap Research Institute [ 11 ]で使用されています。TorchはAndroid [ 12 ]およびiOS [ 13 ]で使用できるように拡張されています。ニューラル ネットワークに見られるようなデータ フローのハードウェア実装を構築するために使用されています。[ 14 ]
Facebookは一連の拡張モジュールをオープンソースソフトウェアとして公開した。[ 15 ]