"Autoencoder" (機械学習メソッド)
- DimensionReduction,DimensionReduce,FeatureSpacePlot,FeatureSpacePlot3Dのためのメソッドである.
- 自動エンコーダニューラルネットを使ってデータの次元を削減する.
詳細とサブオプション
- "Autoencoder"はニューラルネットに基づいた次元削減法である.このメソッドは,情報ボトルネックを持つディープネットワークを使ったデータの恒等関数の近似の学習によってデータの低次元表現を学習する.
- "Autoencoder"は,例が多数で雑音が多い訓練集合を持つ画像等の高次元データに使うことができる.しかし,訓練には時間がかかり,訓練集合が小さいときは失敗することがある.
- 次の特徴空間プロット(FeatureSpacePlotを参照のこと)は,"Autoencoder"法をベンチマーキングデータ集合のFisher's Irises,MNIST,FashionMNISTに適用することで学習した二次元埋込みを示している.
- 自動エンコーダネットワークはエンコーダネットとデコーダネットからなる.エンコーダネットは入力データを低次元数値表現(潜在表現とも呼ばれる)に変換する.デコーダは潜在表現からもとの入力形式を再構築しようとする.
- エンコーダネットワークとデコーダネットワークは,もとのデータと再構築されたデータの間の相違を最小化することで一緒に訓練される.
- エンコーダネットワークとデコーダネットワークの容量を制御するために,サブオプションの"NetworkDepth"を使ってその深度が設定できる.深いネットワークを使うとエンコーダにより複雑なパターンを学習させられるが,こうすると過剰適合になりがちである."NetworkDepth"1は"PrincipalComponentsAnalysis"を実行することに等しい.
- 次は,使用可能なサブオプションである.
-
"NetworkDepth" Automatic エンコーダとデコーダの深度 MaxTrainingRounds Automatic 訓練ラウンドの最大数
例題
すべて開く すべて閉じる例 (2)
自動エンコーダメソッドを使って高次元ランダムベクトルから次元削減器を生成する:
dr = DimensionReduction[RandomReal[{0, 3}, {1000, 10}], Method -> "Autoencoder"]訓練済みの自動エンコーダを使って新たなベクトルの次元を削減する:
dr[RandomReal[{0, 3}, {2, 10}]]自動エンコーダメソッドを使っていくつかの画像の次元を削減する:
fmnist = {[image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image]};
reduced = DimensionReduce[fmnist, 2, Method -> "Autoencoder"];ListPlot[MapThread[Labeled[#1, #2]&, {reduced, fmnist}], ...]スコープ (1)
さまざまな長さの二次元数列からなる訓練データと検証データを作成する:
SeedRandom[123];
m = 3000;
nvs = RandomSample[
Join[
RandomReal[-1, {m, 4, 2}],
RandomReal[1, {m, 2, 2}],
RandomReal[{2, 3}, {m, 3, 2}]
]
];
{nvs2tes, nvs2tra} = TakeDrop[nvs, Round[0.2 * m]];入力列の密な三次元表現を求めるように自動エンコーダを訓練する:
dr = DimensionReduction[nvs2tra, 3, Method -> "Autoencoder"]エンコーダを使って長さと境界が異なる列の間の類似度を可視化する:
f1 = ListPointPlot3D[Values[GroupBy[Thread[dr[nvs2tes] -> Length /@ nvs2tes], Last -> First]], ...];
f2 = ListPointPlot3D[dr[nvs2tes] -> MatrixForm /@ nvs2tes, ...];
Show[{f1, f2}]dr[dr[RandomSample[nvs2tes, 20]], "OriginalData"]オプション (2)
MaxTrainingRounds (1)
NetworkDepth (1)
SeedRandom[1234];
mtrain = Select[ResourceData["MNIST", "TrainingData"], (Last[#] < 5)&];
mtest = Select[RandomSample[ResourceData["MNIST", "TestData"], 2000], (Last[#] < 5)&];いくつかの自動エンコーダを異なる"NetworkDepth"で訓練して画像の次元を削減する:
drtab = Table[DimensionReduction[Keys@mtrain, Method -> {"Autoencoder", "NetworkDepth" -> n}], {n, 1, 4}];さまざまなネットワーク深度による画像の二次元表現を可視化する:
grouptest = KeySort@GroupBy[mtest, Last -> First];
GraphicsGrid[{Table[ListPlot[
Values[drtab[[i]] /@ grouptest],
...
],
{i, 4 }]}, ImageSize -> 500]アプリケーション (2)
データの再構築 (1)
Fashion-MNISTの訓練集合と検定集合をロードする:
ftrain = Keys@ResourceData["FashionMNIST", "TrainingData"];
ftest = Keys@ResourceData["FashionMNIST", "TestData"];dr = DimensionReduction[ftrain, FeatureExtractor -> "PixelVector", Method -> "Autoencoder" ]削減器を使ってエンコーディングから画像を再構築し,もとの画像と比較する:
SeedRandom[1234];
testimgs = RandomSample[ftest, 10];
GraphicsGrid[{testimgs,
dr[dr[testimgs], "OriginalData" ]}]データの可視化 (1)
自動エンコーダメソッドを使っていくつかの画像の次元を削減する:
flowers = {[image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image]};
reduced = DimensionReduce[flowers, 2, Method -> "Autoencoder"];ListPlot[MapThread[Labeled[#1, #2]&, {reduced, flowers}]]