VLSI Wiki
Contents:
  1. [Computer Vision / Deep learning] Multiclass Classification with MNIST Dataset
28 May 2024

[Computer Vision / Deep learning] Multiclass Classification with MNIST Dataset

Computer Vision์˜ ๊ธฐ์ดˆ,,, Deep Learning์˜ ๊ธฐ์ดˆ๋ฅผ ๋‹ค์ง€๊ธฐ ์œ„ํ•ด Multiclass Classification์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

0

MNIST Dataset์€ Machine Learning ๋ถ„์•ผ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

์ด ๋ฐ์ดํ„ฐ๋Š” ์†์œผ๋กœ ์“ด ์ˆซ์ž ์ด๋ฏธ์ง€์˜ ์ง‘ํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ด๋ฏธ์ง€๋Š” 28x28 ํ”ฝ์…€(dot๊ฐ€ ๊ฐ€๋กœ 28, ์„ธ๋กœ 28๊ฐœ) ํฌ๊ธฐ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์ด ์ด๋ฏธ์ง€๋Š” 0๋ถ€ํ„ฐ 9๊นŒ์ง€์˜ ์ˆซ์ž ์ค‘ ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

โ€‹

1

์œ„ํ‚คํ”ผ๋””์•„ ํ”ผ์…œ๋กœ๋Š” CNN์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ MNIST model๋“ค์ด ๊ฐ€์žฅ Error rate๊ฐ€ ๋‚ฎ๋„ค์š”.

โ€‹

์šฐ๋ฆฌ๋Š” ์ •๋ง ๊ฐœ๋…๋งŒ ์‚ดํŽด๋ณผ๊ฑฐ๋ผ,

1) 1pixel nosie ์„ž์–ด์„œ 5x5๋ฅผ ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋กœ 50๊ฐœ์˜ Data ์ƒ์„ฑํ•˜๊ณ .

์˜ˆ๋ฅผ๋“ค์–ด noise ์—†๋Š” 5๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์ด๋ฏธ์ง€๊ฐ€ ๊ทธ๋ ค์ง‘๋‹ˆ๋‹ค.

1 1 1 1 1

1 0 0 0 0

1 1 1 1 0

0 0 0 0 1

1 1 1 1 0

โ€‹

2

โ€‹

2) 5x5 pixel๋กœ 30๊ฐœ ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ Trainingํ•˜๊ณ , 20๊ฐœ Data๋กœ Test dat์— ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ผ๋‹จ MATLAB code ๋จผ์ € ๋ณด์—ฌ๋“œ๋ฆด๊ฒŒ์š”. MATLAB code๋Š” C์–ธ์–ด ๋Š๋‚Œ์ด๋ผ, C ๊ณต๋ถ€ํ•ด๋ณด์…จ์œผ๋ฉด ๋งค์šฐ ์‰ฝ๊ฒŒ ํ•˜์‹ค ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ๋‚ ๋•Œ pytorch ์‹ค์Šต์ž๋ฃŒ๋„ ์ถ”๊ฐ€ํ•ด๋†“์„๊ฒŒ์š”.

โ€‹

โ€‹

TestMultiClass.m : ์ด ํŒŒ์ผ์—๋Š” Training Data๊ฐ€ ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค.

2๊ฐœ์˜ Hidden layer๋กœ ๋˜์–ด์žˆ๊ณ , 5x5๋กœ ๋˜์–ด์žˆ๋Š” ํ–‰๋ ฌ 5๊ฐœ๋กœ ๊ตฌ์„ฑ๋œ 3์ฐจ์› ๋ฐ์ดํ„ฐ ๋งคํŠธ๋ฆญ์Šค์ž…๋‹ˆ๋‹ค. hidden layer์—๋Š” sigmoid function์„ ์ผ๊ณ , output layer์—๋Š” softmax๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹คโ€ฆ ์ด์ „ ๊ธ€์—์„œ ์„ค๋ช…ํ–ˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

โ€‹

X์—์„œ๋Š” Input image ๊ฐ’์„ ์ฃผ๋Š”๊ฑฐ๊ณ , D์—์„œ๋Š” Input image๊ฐ€ ์–ด๋–ค ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š”๊ฑด์ง€ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด๊ณ โ€ฆ Sigmoid ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด Weight๋ฅผ ์ฐพ์•„๋‚˜๊ฐ€๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

clear all

rng(3);

X  = zeros(5, 5, 5);
 
X(:, :, 1) = [ 0 1 1 0 0;
               0 0 1 0 0;
               0 0 1 0 0;
               0 0 1 0 0;
               0 1 1 1 0
             ];
 
X(:, :, 2) = [ 1 1 1 1 0;
               0 0 0 0 1;
               0 1 1 1 0;
               1 0 0 0 0;
               1 1 1 1 1
             ];
 
X(:, :, 3) = [ 1 1 1 1 0;
               0 0 0 0 1;
               0 1 1 1 0;
               0 0 0 0 1;
               1 1 1 1 0
             ];

X(:, :, 4) = [ 0 0 0 1 0;
               0 0 1 1 0;
               0 1 0 1 0;
               1 1 1 1 1;
               0 0 0 1 0
             ];
         
X(:, :, 5) = [ 1 1 1 1 1;
               1 0 0 0 0;
               1 1 1 1 0;
               0 0 0 0 1;
               1 1 1 1 0
             ];

D = [ 1 0 0 0 0;
      0 1 0 0 0;
      0 0 1 0 0;
      0 0 0 1 0;
      0 0 0 0 1
    ];
      
W1 = 2*rand(50, 25) - 1;
W2 = 2*rand( 5, 50) - 1;

for epoch = 1:10000           % train
  [W1 W2] = MultiClass(W1, W2, X, D);
end

N = 5;                        % inference
for k = 1:N
  x  = reshape(X(:, :, k), 25, 1);
  v1 = W1*x;
  y1 = Sigmoid(v1);
  v  = W2*y1;
  y  = Softmax(v)
end




%-----Function Define-------
% MultiClass
function [W1, W2] = MultiClass(W1, W2, X, D)
  alpha = 0.9;
  
  N = 5;  
  for k = 1:N
    x = reshape(X(:, :, k), 25, 1);
    d = D(k, :)';
    
    v1 = W1*x;
    y1 = Sigmoid(v1);
    v  = W2*y1;
    y  = Softmax(v);
    
    e     = d - y;
    delta = e;

    e1     = W2'*delta;
    delta1 = y1.*(1-y1).*e1; 
    
    dW1 = alpha*delta1*x';
    W1 = W1 + dW1;
    
    dW2 = alpha*delta*y1';   
    W2 = W2 + dW2;
  end
end

% Sigmoid
function y = Sigmoid(x)
  y = 1 ./ (1 + exp(-x));
end
% Softmax
function y = Softmax(x)
  ex = exp(x);
  y  = ex / sum(ex);
end

๊ฒฐ๊ณผ๊ฐ’์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ž˜ ํŠธ๋ ˆ์ด๋‹๋˜์—ˆ๋„ค์š”.

3

โ€‹

โ€‹

โ€‹

์—ฌ๊ธฐ์— 1 pixel noise๊ฐ€ ์„ž์ธ Data set 5๊ฐœ๋ฅผ ๋„ฃ์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹น.

clear all

TestMultiClass;                 % W1, W2

X  = zeros(5, 5, 5);
 
X(:, :, 1) = [ 0 0 1 1 0;
               0 0 1 1 0;
               0 1 0 1 0;
               0 0 0 1 0;
               0 1 1 1 0
             ];
 
X(:, :, 2) = [ 1 1 1 1 0;
               0 0 0 0 1;
               0 1 1 1 0;
               1 0 0 0 1;
               1 1 1 1 1
             ];
 
X(:, :, 3) = [ 1 1 1 1 0;
               0 0 0 0 1;
               0 1 1 1 0;
               1 0 0 0 1;
               1 1 1 1 0
             ];
         
X(:, :, 4) = [ 0 1 1 1 0;
               0 1 0 0 0;
               0 1 1 1 0;
               0 0 0 1 0;
               0 1 1 1 0
             ];     
         
X(:, :, 5) = [ 0 1 1 1 1;
               0 1 0 0 0;
               0 1 1 1 0;
               0 0 0 1 0;
               1 1 1 1 0
             ];    
         
N = 5;                        % inference
for k = 1:N
  x  = reshape(X(:, :, k), 25, 1);
  v1 = W1*x;
  y1 = Sigmoid(v1);
  v  = W2*y1;
  y  = Softmax(v)
end



%-----Function Define-------
% MultiClass
function [W1, W2] = MultiClass(W1, W2, X, D)
  alpha = 0.9;
  
  N = 5;  
  for k = 1:N
    x = reshape(X(:, :, k), 25, 1);
    d = D(k, :)';
    
    v1 = W1*x;
    y1 = Sigmoid(v1);
    v  = W2*y1;
    y  = Softmax(v);
    
    e     = d - y;
    delta = e;

    e1     = W2'*delta;
    delta1 = y1.*(1-y1).*e1; 
    
    dW1 = alpha*delta1*x';
    W1 = W1 + dW1;
    
    dW2 = alpha*delta*y1';   
    W2 = W2 + dW2;
  end
end

% Sigmoid
function y = Sigmoid(x)
  y = 1 ./ (1 + exp(-x));
end
% Softmax
function y = Softmax(x)
  ex = exp(x);
  y  = ex / sum(ex);
end

๊ฒฐ๊ณผ๊ฐ’์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

4

5

์‚ฌ์‹ค ์œ„ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ๋žŒ์ด ๋ณด๋ฉด, 1์ด๋ผ๊ณ  ์ƒ๊ฐ ํ•  ๊ฒƒ ๊ฐ™์€๋ฐ, ์ œ๊ฐ€ ๋งŒ๋“  ํŠธ๋ ˆ์ด๋‹์„ธํŠธ์—์„œ๋Š” 4๋กœ ์ธ์‹์„ ํ•˜๋Š”๊ตฐ์š”. 2, 3, 5๋Š” ์ž˜ ์ฐพ๋Š” ๊ฒƒ ๊ฐ™์€๋ฐโ€ฆ 1์ด๋ž‘ 4๋ฅผ ์ž˜ ๋ชป ์ฐพ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

โ€‹

clear all

rng(3);

X  = zeros(5, 5, 5);
 
X(:, :, 1) = [ 0 1 1 0 0;
               0 0 1 0 0;
               0 0 1 0 0;
               0 0 1 0 0;
               0 1 1 1 0
             ];
 
X(:, :, 2) = [ 1 1 1 1 0;
               0 0 0 0 1;
               0 1 1 1 0;
               1 0 0 0 0;
               1 1 1 1 1
             ];
 
X(:, :, 3) = [ 1 1 1 1 0;
               0 0 0 0 1;
               0 1 1 1 0;
               0 0 0 0 1;
               1 1 1 1 0
             ];

X(:, :, 4) = [ 0 0 0 1 0;
               0 0 1 1 0;
               0 1 0 1 0;
               1 1 1 1 1;
               0 0 0 1 0
             ];
         
X(:, :, 5) = [ 1 1 1 1 1;
               1 0 0 0 0;
               1 1 1 1 0;
               0 0 0 0 1;
               1 1 1 1 0
             ];
X(:, :, 1) = [ 1 0 1 1 0;
               0 0 1 1 0;
               0 1 0 1 0;
               0 0 0 1 0;
               0 1 1 1 0
             ];

X(:, :, 6) = [ 0 0 1 1 0;
               1 0 1 1 0;
               0 1 0 1 0;
               0 0 0 1 0;
               0 1 1 1 0
             ];

X(:, :, 7) = [ 0 0 1 1 0;
               0 0 1 1 0;
               1 1 0 1 0;
               0 0 0 1 0;
               0 1 1 1 0
             ];

X(:, :, 8) = [ 0 0 1 1 0;
               0 0 1 1 0;
               0 1 0 1 0;
               1 0 0 1 0;
               0 1 1 1 0
             ];

X(:, :, 9) = [ 0 0 1 1 0;
               0 0 1 1 0;
               0 1 0 1 0;
               0 0 0 1 0;
               1 1 1 1 0
             ];

X(:, :, 10) = [ 0 0 1 1 1;
               0 0 1 1 0;
               0 1 0 1 0;
               0 0 0 1 0;
               0 1 1 1 0
             ];

X(:, :, 11) = [ 0 0 1 1 0;
               0 0 1 1 1;
               0 1 0 1 0;
               0 0 0 1 0;
               0 1 1 1 0
             ];


D = [ 1 0 0 0 0;
      0 1 0 0 0;
      0 0 1 0 0;
      0 0 0 1 0;
      0 0 0 0 1;
      1 0 0 0 0;
      1 0 0 0 0;
      1 0 0 0 0;
      1 0 0 0 0;
      1 0 0 0 0;
      1 0 0 0 0;
      1 0 0 0 0
    ];
      
W1 = 2*rand(50, 25) - 1;
W2 = 2*rand( 5, 50) - 1;

for epoch = 1:10000           % train
  [W1 W2] = MultiClass(W1, W2, X, D);
end

N = 5;                        % inference
for k = 1:N
  x  = reshape(X(:, :, k), 25, 1);
  v1 = W1*x;
  y1 = Sigmoid(v1);
  v  = W2*y1;
  y  = Softmax(v)
end




%-----Function Define-------
% MultiClass
function [W1, W2] = MultiClass(W1, W2, X, D)
  alpha = 0.9;
  
  N = 5;  
  for k = 1:N
    x = reshape(X(:, :, k), 25, 1);
    d = D(k, :)';
    
    v1 = W1*x;
    y1 = Sigmoid(v1);
    v  = W2*y1;
    y  = Softmax(v);
    
    e     = d - y;
    delta = e;

    e1     = W2'*delta;
    delta1 = y1.*(1-y1).*e1; 
    
    dW1 = alpha*delta1*x';
    W1 = W1 + dW1;
    
    dW2 = alpha*delta*y1';   
    W2 = W2 + dW2;
  end
end

% Sigmoid
function y = Sigmoid(x)
  y = 1 ./ (1 + exp(-x));
end
% Softmax
function y = Softmax(x)
  ex = exp(x);
  y  = ex / sum(ex);
end

Model ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด ๊ทธ๋‹ˆ๊น,

โ€‹

A Training set์œผ๋กœ Model ๋งŒ๋“ค๊ณ  Testํ•ด๋ณด๊ณ ,

B Training set์œผ๋กœ Model ๋งŒ๋“ค๊ณ  Testํ•ด๋ณด๊ณ โ€ฆ.

์ด๋Ÿฐ์‹์œผ๋กœ ๋ฐ˜๋ณต์„ ํ•ด์„œ, ๊ฐ€์žฅ ์ข‹์€ Training set์„ ์ฐพ์•„์„œ, Model ๋งŒ๋“œ๋Š”๊ฒ๋‹ˆ๋‹ค.

โ€‹

AI๋กœ ๋ฐ•์‚ฌ๊ณผ์ • ํ•˜๊ณ ์žˆ๋Š” ์นœ๊ตฌํ•œํ…Œโ€ฆ.

โ€œTraining, Validation, Test ๋ฒกํ„ฐ์„ธํŠธโ€ ์–ด๋–ค ๋น„์œจ์œผ๋กœ ์ฃผ๋ƒ๊ณ  ๋ฌผ์–ด๋ณด๋‹ˆ๊นŒ, ๋ณดํ†ต Training Data, Validation data, Test data๋กœ 6:3:1์ด๋‚˜ 7:2:1 ํ˜น์€ 9:1๋กœ ์ค€๋‹ค๊ณ  ํ•˜๋”๋ผ๊ตฌ์—ฌ.

โ€‹

โ€‹

6

โ€‹

7

์ด๋Ÿฐ๊ฑฐ ํŠธ๋ ˆ์ด๋‹ ๋ฐ์ดํ„ฐ์— ์‹ค์ˆ˜๋กœ ๋„ฃ์—ˆ๋‹ค๊ฐ€, 2๋ž‘ 3 ๋‘˜๋‹ค ๋ชจ๋ธ์ด ์ด์ƒํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ง€๋”๋ผ๊ตฌ์š”. ์ด๋Ÿฐ๊ฑฐ ํŠธ๋ ˆ์ด๋‹ ๋ฐ์ดํ„ฐ์— ์•ˆ ๋“ค์–ด๊ฐ€๋„๋ก ์กฐ์‹ฌํžˆ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

โ€‹

๋ฐ์ดํ„ฐ์…‹ ํ•œ 50๊ฐœ ์ •๋„ ๋„ฃ์–ด๋ณด๋‹ˆ, 5x5์—์„œ๋Š” ์ถฉ๋ถ„ํžˆ ๋งŒ์กฑ์Šค๋Ÿฌ์šด MODEL์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

โ€‹

โ€‹

โ€‹

์ธ๊ณต์‹ ๊ฒฝ๋ง์—์„œ data์˜ ์–‘๊ณผ ์งˆ์ด ์–ด๋–ป๋Š๋ƒ๊ฐ€ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์š”์†Œ์ธ ๊ฒƒ ๊ฐ™๊ณ , ์ด ์š”์†Œ๋“ค์„ ์–ด๋–ค ๋น„์œจ๋กœ Training, Validation์œผ๋กœ ๋‚˜๋ˆŒ์ง€๋„ ์ค‘์š”ํ•˜๋ฉฐ, ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ๋ช‡ ๊ฐœ์˜ Hidden layer๋กœ ์‚ฌ์šฉํ• ์ง€ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

Learning process๋ฅผ ์š”์•ฝํ•˜๋ฉด input ~ output ๊ฐ„ weight๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Training data์˜ ์–‘์ด ์ ๊ฑฐ๋‚˜ ๋ถˆ๊ท ํ˜•ํ•˜๊ฒŒ ๋ถ„ํฌ๋˜์–ด ์žˆ๋‹ค๋ฉด, ๋ชจ๋ธ์ด ํ•™์Šตํ•œ ํŒจํ„ด์ด ํŽธํ–ฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ ๋‹นํ•œ ๋…ธ์ด์ฆˆ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ชจ๋ธ ์ƒ์„ฑ์— ๋…ธ์ด์ฆˆ ๋งˆ์ง„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์„œ์น˜ํ•ด๋ณด๋‹ˆ, sigmoid ํ•จ์ˆ˜๊ฐ€ binary classification์—์„  ๋งŽ์ด ์“ฐ์ด์ง€๋งŒ, ์ด์™ธ์˜ ๊ฒฝ์šฐ์—” relu ํ•จ์ˆ˜๊ฐ€ ๋ชจ๋ธ ์ƒ์„ฑ์—๋„, ์‹œ๊ฐ„์ ์œผ๋กœ๋„ ๋” ์ข‹๋‹ค๊ณ  ํ•˜๋„ค์š”. ใ…Žใ…Ž

โ€‹

โ€‹

โ€‹

ํ•ด์‹œํƒœ๊ทธ :