trainAutoencoder
오토인코더 훈련
구문
설명
는 은닉 표현 크기가 autoenc
= trainAutoencoder(X
,hiddenSize
)hiddenSize
인 오토인코더 autoenc
를 반환합니다.
는 위에 열거된 입력 인수와 하나 이상의 autoenc
= trainAutoencoder(___,Name,Value
)Name,Value
쌍 인수로 지정된 추가 옵션에 대해 오토인코더 autoenc
를 반환합니다.
예를 들어, 희소성 비율이나 최대 훈련 반복 횟수를 지정할 수 있습니다.
예제
희소 오토인코더 훈련시키기
샘플 데이터를 불러옵니다.
X = abalone_dataset;
X
는 전복 껍데기 4,177개의 8가지 특성, 즉 성별(M, F, I(미숙 객체)), 길이, 지름, 높이, 전체 중량, 속살 중량, 내장 중량, 껍데기 중량을 정의하는 8×4,177 행렬입니다. 이 데이터셋에 대한 자세한 내용을 보려면 명령줄에 help abalone_dataset
을 입력하십시오.
디폴트 설정으로 희소 오토인코더를 훈련시킵니다.
autoenc = trainAutoencoder(X);
훈련된 오토인코더를 사용하여 전복 껍데기 나이테 데이터를 다시 생성합니다.
XReconstructed = predict(autoenc,X);
이 재구성에 대한 평균제곱오차를 계산합니다.
mseError = mse(X-XReconstructed)
mseError = 0.0167
지정된 옵션으로 오토인코더 훈련시키기
샘플 데이터를 불러옵니다.
X = abalone_dataset;
X
는 전복 껍데기 4,177개의 8가지 특성, 즉 성별(M, F, I(미숙 객체)), 길이, 지름, 높이, 전체 중량, 속살 중량, 내장 중량, 껍데기 중량을 정의하는 8×4,177 행렬입니다. 이 데이터셋에 대한 자세한 내용을 보려면 명령줄에 help abalone_dataset
을 입력하십시오.
은닉 크기 4, 최대 Epoch 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;
훈련 데이터는 각 셀에 손으로 쓴 숫자를 표현한 합성 영상을 나타내는 28×28 행렬이 있는 1×5,000 셀형 배열입니다.
25개의 뉴런을 포함하는 은닉 계층 1개를 갖는 오토인코더를 훈련시킵니다.
hiddenSize = 25; autoenc = trainAutoencoder(XTrain,hiddenSize,... 'L2WeightRegularization',0.004,... 'SparsityRegularization',4,... 'SparsityProportion',0.15);
테스트 데이터를 불러옵니다.
XTest = digitTestCellArrayData;
테스트 데이터는 각 셀에 손으로 쓴 숫자를 표현한 합성 영상을 나타내는 28×28 행렬이 있는 1×5,000 셀형 배열입니다.
훈련된 오토인코더 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
— 훈련 데이터
행렬 | 영상 데이터로 구성된 셀형 배열
훈련 데이터로, 훈련 샘플로 구성된 행렬 또는 영상 데이터로 구성된 셀형 배열로 지정됩니다. X
가 행렬인 경우, 각 열에는 하나의 샘플이 있습니다. X
가 영상 데이터로 구성된 셀형 배열인 경우, 각 셀의 데이터는 차원 수가 같아야 합니다. 영상 데이터는 회색조 영상의 픽셀 명암 값일 수 있으며, 이 경우 각 셀에는 하나의 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
— 최대 훈련 Epoch 횟수
1000 (디폴트 값) | 양의 정수 값
최대 훈련 Epoch 횟수 또는 반복 횟수로, 'MaxEpochs'
와 함께 양의 정수 값이 쉼표로 구분되어 지정됩니다.
예: 'MaxEpochs',1200
L2WeightRegularization
— L2 가중치 정규화 함수의 계수
0.001 (디폴트 값) | 양의 스칼라 값
비용 함수(LossFunction
)에서 L2 가중치 정규화 함수의 계수로, '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'
가 쉼표로 구분되어 지정됩니다. scg는 스케일링된 켤레 경사하강법(scaled conjugate gradient descent) [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]. 이 정규화 함수는 뉴런의 평균 출력 활성화 값에 대한 함수입니다. 뉴런 i의 평균 출력 활성화 측정값은 다음과 같이 정의됩니다.
여기서 n은 훈련 표본의 총 개수입니다. xj는 j번째 훈련 표본이고, 는 가중치 행렬 의 i번째 행이고, 은 편향 벡터 의 i번째 요소입니다. 출력 활성화 값이 매우 높으면 뉴런이 '발화'(활성)한다고 간주됩니다. 출력 활성화 값이 낮으면 은닉 계층의 뉴런이 적은 개수의 훈련 표본에 반응하여 발화함을 의미합니다. 비용 함수에 의 값이 낮도록 제약하는 항을 추가하면, 오토인코더는 은닉 계층에 있는 각 뉴런이 적은 개수의 훈련 표본에 반응하여 발화하는 표현을 학습하도록 유발됩니다. 즉, 각 뉴런은 훈련 표본 중 작은 일부에만 존재하는 특정 특징에 반응하도록 특화됩니다.
희소성 정규화
희소 정규화 함수는 은닉 계층에서의 출력값의 희소성에 제약 조건을 적용하려고 시도합니다. 뉴런 i의 평균 활성화 값 와 그에 대한 원하는 값 가 비슷하지 않으면 큰 값을 갖는 정규화 항을 추가하여 희소성을 유발할 수 있습니다[2]. 이러한 희소 정규화 항의 예로 쿨백-라이블러(Kullback-Leibler) 발산을 들 수 있습니다.
쿨백-라이블러 발산은 두 분포가 얼마나 다른지 측정하는 함수입니다. 이 경우에 쿨백-라이블러 발산은 와 가 서로 같으면 값이 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 명령 창에 입력하십시오. 웹 브라우저는 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)