線形層は、深層学習で最も一般的に使用される層の 1 つであり、ニューラル ネットワークで重要な役割を果たします。画像分類、物体検出、音声認識などのタスクで広く使用されています。この記事では、多次元テンソルにおける線形層の役割に焦点を当てます。
まず、線形レイヤーの基本原理を確認しましょう。入力テンソルの場合、W のパラメーターは (n_out, n_in)、b の形状は (n_out,) です。 n_in は入力テンソルのサイズを表し、n_out は出力テンソルのサイズを表します。入力テンソルが 1 次元テンソル x∈R^n_in であり、出力テンソルも 1 次元テンソル y∈R^n_out であると仮定します。線形層では、入力テンソルが重み行列 W とバイアス ベクトル b によって線形変換され、出力テンソル y が取得されます。この線形変換は、y = Wx b として表すことができます。このうち、Wの各行は線形層の出力ニューロンの重みベクトルを表し、bの各要素は対応する出力ニューロンのバイアス値を表す。最終出力テンソル y の各要素は、対応する出力ニューロンの重みベクトルと入力テンソル、および対応するオフセット値のドット積を実行することによって取得されます。
さて、形状が (n_1,n_2,…,n_k) である多次元テンソル X があるとします。これを線形層に渡して、形状 (m_1,m_2,…,m_l) を持つ出力テンソル Y を生成する必要があります。このとき、私たちは何をすべきでしょうか?
まず、X を 1 次元テンソルに平坦化する必要があります。このプロセスは「レベリング」操作と呼ばれることが多く、PyTorch の view 関数を使用して実装できます。具体的には、X の形状を (n_1\times n_2\times...\times n_k,) に変更できます。つまり、すべての次元の要素を 1 つの列に配置します。このようにして、サイズが n_{in}=n_1\times n_2\times…\times n_k の 1 次元テンソル x を取得します。
次に、x を線形層に渡し、出力テンソル y を取得します。具体的には、線形層の計算式を使用できます:
y=Wx b
ここで、W の形状は (m_{ out} ,n_{in})、b の形状は (m_{out},)、m_{out} は出力テンソルのサイズを表します。乗算の結果 Wx は、形状 (m_{out},) を持つ 1 次元テンソルであり、オフセット b を追加すると、形状 (m_{out},) を持つ出力テンソル y が得られます。
最後に、y を多次元テンソルの形式に変換し直す必要があります。具体的には、PyTorch の view 関数を使用して、y の形状を (m_1, m_2,...,m_l) に変更できます。このようにして、最終出力テンソル Y を取得します。
多次元テンソルを 1 次元テンソルに平坦化するときは、テンソル内の要素の順序が変わらないことを確認する必要があることに注意してください。たとえば、形状 (2,3) の 2 次元テンソル X があるとします。
XX=\begin{bmatrix}1&2&3\4&5&6\end{bmatrix}
これを 1 次元テンソルに平坦化する必要があります。 view(-1) を使用して実装すると、結果は次のようになります:
xx=[1,2,3,4,5,6]
ここでは、要素 (1,2) と (4,5) の 2 行をまとめて配置し、順序を変更します。したがって、正しい操作は、view(-1) を使用してテンソルを平坦化し、次に view(1,-1) を使用して元の形状に変換することです。 x =\begin{bmatrix}1&2&3&4&5&6\end{bmatrix}
##X=\begin{bmatrix}1&2&3\4&5&6\end{bmatrix} このようにして、多次元テンソルを線形層に正しく渡し、正しい出力テンソルを取得できます。 多次元テンソルにおける線形層の役割は、各サンプルの独立した線形変換として見ることができることに注意してください。たとえば、形状 (N、C、H、W) の 4 次元テンソル X があるとします。ここで、N はサンプル数を表し、C はチャネル数を表し、H と W はそれぞれ高さと幅を表します。拡張できる線形層は、各サンプルに対して独立した線形変換を実行して、(N,m_{out}) の形状を持つ出力テンソル Y を取得します。最後に、Y を最初の次元に沿って元の形状 (N,m_1,m_2,…,m_l) に復元できます。 要するに、多次元テンソル上の線形層の役割は、各サンプルの独立した線形変換として見ることができます。実際のアプリケーションでは、通常、多次元テンソルを 1 次元テンソルに平坦化し、それらを線形層に渡します。平坦化操作では、要素の順序が変更されないようにする必要があります。そうしないと、不正確な計算結果が得られます。最後に、次の計算ステップのために出力テンソルを元の形状に復元する必要があります。以上が多次元テンソルと線形層の間の相互作用原理は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。