このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
trainAutoencoder
自己符号化器の学習
構文
説明
は、隠れ表現のサイズが autoenc
= trainAutoencoder(X
,hiddenSize
)hiddenSize
の自己符号化器 autoenc
を返します。
は、上記のいずれかの入力引数と、追加オプションとして指定される 1 つ以上のペアの引数 autoenc
= trainAutoencoder(___,Name,Value
)Name,Value
について、自己符号化器 autoenc
を返します。
たとえば、スパース率または学習の最大反復回数を指定できます。
例
スパース自己符号化器の学習
標本データを読み込みます。
X = abalone_dataset;
X
は、4177 個のアワビの貝殻について、性別 (M、F、および I (幼生))、全長、直径、高さ、全重量、むき身重量、内臓重量、貝殻重量の 8 個の属性を定義する 8 行 4177 列の行列です。このデータセットの詳細を表示するには、コマンド ラインで help abalone_dataset
と入力します。
既定の設定でスパース自己符号化器に学習させます。
autoenc = trainAutoencoder(X);
学習済みの自己符号化器を使用して、アワビの貝殻の輪のデータを再構成します。
XReconstructed = predict(autoenc,X);
平均二乗再構成誤差を計算します。
mseError = mse(X-XReconstructed)
mseError = 0.0167
オプションを指定した自己符号化器の学習
標本データを読み込みます。
X = abalone_dataset;
X
は、4177 個のアワビの貝殻について、性別 (M、F、および I (幼生))、全長、直径、高さ、全重量、むき身重量、内臓重量、貝殻重量の 8 個の属性を定義する 8 行 4177 列の行列です。このデータセットの詳細を表示するには、コマンド ラインで help abalone_dataset
と入力します。
隠れサイズ 4、最大エポック数 400、および復号化器用の線形伝達関数を使用して、スパース自己符号化器に学習させます。
autoenc = trainAutoencoder(X,4,'MaxEpochs',400,... 'DecoderTransferFunction','purelin');
学習済みの自己符号化器を使用して、アワビの貝殻の輪のデータを再構成します。
XReconstructed = predict(autoenc,X);
平均二乗再構成誤差を計算します。
mseError = mse(X-XReconstructed)
mseError = 0.0044
スパース自己符号化器を使用した観測値の再構成
学習データを生成します。
rng(0,'twister'); % For reproducibility n = 1000; r = linspace(-10,10,n)'; x = 1 + r*5e-2 + sin(r)./r + 0.2*randn(n,1);
学習データを使用して自己符号化器に学習させます。
hiddenSize = 25; autoenc = trainAutoencoder(x',hiddenSize,... 'EncoderTransferFunction','satlin',... 'DecoderTransferFunction','purelin',... 'L2WeightRegularization',0.01,... 'SparsityRegularization',4,... 'SparsityProportion',0.10);
テスト データを生成します。
n = 1000; r = sort(-10 + 20*rand(n,1)); xtest = 1 + r*5e-2 + sin(r)./r + 0.4*randn(n,1);
学習済みの自己符号化器 autoenc
を使用してテスト データを予測します。
xReconstructed = predict(autoenc,xtest');
実際のテスト データと予測をプロットします。
figure; plot(xtest,'r.'); hold on plot(xReconstructed,'go');
スパース自己符号化器を使用した手書きの数字イメージの再構成
学習データを読み込みます。
XTrain = digitTrainCellArrayData;
学習データは 1 行 5000 列の cell 配列です。各セルには、手書きの数字の合成イメージを表す 28 行 28 列の行列が含まれます。
25 個のニューロンが含まれる隠れ層を使用して自己符号化器に学習させます。
hiddenSize = 25; autoenc = trainAutoencoder(XTrain,hiddenSize,... 'L2WeightRegularization',0.004,... 'SparsityRegularization',4,... 'SparsityProportion',0.15);
テスト データを読み込みます。
XTest = digitTestCellArrayData;
テスト データは 1 行 5000 列の cell 配列です。各セルには、手書きの数字の合成イメージを表す 28 行 28 列の行列が含まれます。
学習済みの自己符号化器 autoenc
を使用してテスト イメージ データを再構成します。
xReconstructed = predict(autoenc,XTest);
実際のテスト データを表示します。
figure; for i = 1:20 subplot(4,5,i); imshow(XTest{i}); end
再構成されたテスト データを表示します。
figure; for i = 1:20 subplot(4,5,i); imshow(xReconstructed{i}); end
入力引数
X
— 学習データ
行列 | イメージ データの cell 配列
学習データ。学習標本の行列またはイメージ データの cell 配列として指定します。X
が行列の場合、各列に 1 つの標本が含まれます。X
がイメージ データの cell 配列の場合、各セルのデータの次元の数が同じでなければなりません。イメージ データは、グレー イメージのピクセル強度データにすることができます。この場合、各セルには m 行 n 列の行列が格納されます。または、イメージ データを RGB データにすることができます。この場合、各セルには m 行 n-3 列の行列が格納されます。
データ型: single
| double
| cell
hiddenSize
— 自己符号化器の隠れ表現のサイズ
10 (既定値) | 正の整数値
自己符号化器の隠れ表現のサイズ。正の整数値として指定します。この数値は、隠れ層のニューロンの数になります。
データ型: single
| double
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用して名前と値の各ペアを区切り、Name
を引用符で囲みます。
例: 'EncoderTransferFunction','satlin','L2WeightRegularization',0.05
は、符号化器の伝達関数に正の飽和線形伝達関数、L2 重み正則化に 0.05 を指定します。
EncoderTransferFunction
— 符号化器の伝達関数
'logsig'
(既定値) | 'satlin'
符号化器の伝達関数。'EncoderTransferFunction'
と、次のいずれかで構成されるコンマ区切りのペアとして指定します。
伝達関数オプション | 定義 |
---|---|
'logsig' | ロジスティック シグモイド関数
|
'satlin' | 正の飽和線形伝達関数
|
例: 'EncoderTransferFunction','satlin'
DecoderTransferFunction
— 復号化器の伝達関数
'logsig'
(既定値) | 'satlin'
| 'purelin'
復号化器の伝達関数。'DecoderTransferFunction'
と、次のいずれかで構成されるコンマ区切りのペアとして指定します。
伝達関数オプション | 定義 |
---|---|
'logsig' | ロジスティック シグモイド関数
|
'satlin' | 正の飽和線形伝達関数
|
'purelin' | 線形伝達関数
|
例: 'DecoderTransferFunction','purelin'
MaxEpochs
— 学習エポックの最大回数
1000 (既定値) | 正の整数値
学習エポックまたは反復の最大回数。'MaxEpochs'
と正の整数値で構成されるコンマ区切りのペアとして指定します。
例: 'MaxEpochs',1200
L2WeightRegularization
— L2 重み正則化項の係数
0.001 (既定値) | 正のスカラー値
コスト関数の L2 重み正則化項の係数 (LossFunction
)。'L2WeightRegularization'
と正のスカラー値で構成されるコンマ区切りのペアとして指定します。
例: 'L2WeightRegularization',0.05
LossFunction
— 学習に使用する損失関数
'msesparse'
(既定値)
学習に使用する損失関数。'LossFunction'
と 'msesparse'
で構成されるコンマ区切りのペアとして指定します。これは、以下のようにスパース自己符号化器の学習用に調整された平均二乗誤差関数に対応しています。
ここで、λ は L2 正則化項の係数、β はスパース正則化項の係数です。自己符号化器の学習時に、名前と値のペアの引数 L2WeightRegularization
および SparsityRegularization
を使用して、λ および β の値をそれぞれ指定できます。
ShowProgressWindow
— 学習ウィンドウを表示するかどうかのインジケーター
true
(既定値) | false
学習ウィンドウを表示するかどうかのインジケーター。'ShowProgressWindow'
と、true
または false
のいずれかで構成されるコンマ区切りのペアとして指定します。
例: 'ShowProgressWindow',false
SparsityProportion
— ニューロンが応答する学習例の目標比率
0.05 (既定値) | 0 から 1 の範囲にある正のスカラー値
ニューロンが応答する学習例の目標比率。'SparsityProportion'
と正のスカラー値で構成されるコンマ区切りのペアとして指定します。スパース率は、スパース正則化項のパラメーターです。これは、隠れ層からの出力のスパース性を制御します。SparsityProportion に低い値を指定すると、通常、隠れ層の各ニューロンは、少数の学習例の出力を大きくした場合に限り "特殊化" します。したがって、スパース率を低くすると、スパース度が高くなります。スパース自己符号化器を参照してください。
例: 'SparsityProportion',0.01
は、隠れ層の各ニューロンの学習例に対する平均出力が 0.1 になるようにすることと等価です。
SparsityRegularization
— スパース正則化項の影響を制御する係数
1 (既定値) | 正のスカラー値
コスト関数のスパース正則化項の影響を制御する係数。'SparsityRegularization'
と正のスカラー値で構成されるコンマ区切りのペアとして指定します。
例: 'SparsityRegularization',1.6
TrainingAlgorithm
— 自己符号化器の学習に使用するアルゴリズム
'trainscg'
(既定値)
自己符号化器の学習に使用するアルゴリズム。'TrainingAlgorithm'
と 'trainscg'
で構成されるコンマ区切りのペアとして指定します。これは、スケーリング共役勾配降下法 [1] を意味します。
ScaleData
— 入力データを再スケーリングするかどうかのインジケーター
true
(既定値) | false
入力データを再スケーリングするかどうかのインジケーター。'ScaleData'
と、true
または false
のいずれかで構成されるコンマ区切りのペアとして指定します。
自己符号化器は、出力で入力を複製しようとします。これを可能にするには、入力データの範囲が復号化器の伝達関数の範囲と一致しなければなりません。trainAutoencoder
は、自己符号化器の学習時に、この範囲に合わせて学習データを自動的にスケーリングします。自己符号化器の学習時にデータがスケーリングされた場合、predict
、encode
、および decode
の各メソッドでもデータのスケーリングが行われます。
例: 'ScaleData',false
UseGPU
— 学習に GPU を使用するかどうかのインジケーター
false
(既定値) | true
学習に GPU を使用するかどうかのインジケーター。'UseGPU'
と、true
または false
のいずれかで構成されるコンマ区切りのペアとして指定します。
例: 'UseGPU',true
出力引数
autoenc
— 学習済みの自己符号化器
Autoencoder
オブジェクト
学習済みの自己符号化器。Autoencoder
オブジェクトとして返されます。このオブジェクトのプロパティとメソッドについては、Autoencoder
クラスのページを参照してください。
詳細
自己符号化器
自己符号化器とは、出力で入力を複製するように学習させられたニューラル ネットワークです。自己符号化器は、深層ニューラル ネットワークに学習させるツールとして使用できます。ラベル付けされたデータを必要としないという意味で、自己符号化器が行う学習は教師なし学習です。ただし、学習プロセスはコスト関数の最適化をベースにしています。コスト関数は、入力 x と、その出力での再構成 の誤差を測定します。
自己符号化器は、符号化器と復号化器で構成されています。符号化器と復号化器には複数の層がある場合がありますが、単純化のために、それぞれの層が 1 つだけであると考えます。
自己符号化器への入力がベクトル である場合、符号化器は以下のようにベクトル x を別のベクトル にマッピングします。
ここで、上付き文字 (1) は最初の層を示します。 は符号化器の伝達関数、 は重み行列、 はバイアス ベクトルです。次に、復号化器が、符号化された表現 z を以下のように元の入力ベクトル x の推定に逆マッピングします。
ここで、上付き文字 (2) は 2 番目の層を表します。 は復号化器の伝達関数、 は重み行列、 はバイアス ベクトルです。
スパース自己符号化器
正則化項をコスト関数に追加することによって、自己符号化器のスパース性を高めることができます [2]。この正則化項は、ニューロンの平均出力活性化値の関数です。ニューロン i の平均出力活性化測定値は、以下のように定義されます。
ここで、n は学習例の総数です。xj は j 番目の学習例、 は重み行列 の i 番目の行、 はバイアス ベクトル の i 番目のエントリです。出力活性化値が大きい場合、ニューロンが '活性化' していると見なされます。出力活性化値が小さい場合、学習例の数が少ないことに応答して隠れ層のニューロンが活性化することを意味します。コスト関数に の値を低く抑える項を追加すると、自己符号化器が表現を学習するようになります。隠れ層の各ニューロンは、学習例の数が少ないことに対して活性化します。つまり、各ニューロンは、学習例の小規模サブセットだけに含まれる特定の特徴に応答することによって特殊化します。
スパース正則化
スパース正則化項は、隠れ層からの出力のスパース性に制約を課そうとします。ニューロン i の平均出力活性化値 とその目標値 が近くない場合に大きな値を取る正則化項を追加することによって、スパース性を高めることができます [2]。このようなスパース正則化項の 1 つとして、カルバック・ライブラー ダイバージェンスが挙げられます。
カルバック・ライブラー ダイバージェンスは、2 つの分布の違いを測定する関数です。この場合、 および が互いに等しい場合には値 0 を取り、互いの差が開くに従い値が大きくなります。コスト関数を最小化するとこの項が小さくなるため、 と が互いに近くなります。自己符号化器の学習時に、名前と値のペアの引数 SparsityProportion
を使用して、平均活性化値の目標値を定義できます。
L2 正則化
スパース自己符号化器の学習を行う場合、重み w(l) の値を大きく、z(1) の値を小さくすることによって、スパース正則化項を小さくすることができます [2]。コスト関数に対する重みに正則化項を追加すると、これが起こらなくなります。この項は L2 正則化項と呼ばれ、以下のように定義されます。
ここで、L は隠れ層の数、nl は層 l の出力サイズ、kl は層 l の入力サイズです。L2 正則化項は、各層の重み行列の要素の二乗和です。
コスト関数
スパース自己符号化器の学習用のコスト関数は、以下のような調整された平均二乗誤差関数です。
ここで、λ は L2 正則化項の係数、β はスパース正則化項の係数です。自己符号化器の学習時に、名前と値のペアの引数 L2WeightRegularization
および SparsityRegularization
を使用して、λ および β の値をそれぞれ指定できます。
参照
[1] Moller, M. F. “A Scaled Conjugate Gradient Algorithm for Fast Supervised Learning”, Neural Networks, Vol. 6, 1993, pp. 525–533.
[2] Olshausen, B. A. and D. J. Field. “Sparse Coding with an Overcomplete Basis Set: A Strategy Employed by V1.” Vision Research, Vol.37, 1997, pp.3311–3325.
バージョン履歴
R2015b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)