【入門】単純パーセプトロンで分類(MATLAB)【数値計算】

【入門】単純パーセプトロンで分類(MATLAB)【数値計算】 数値計算
【入門】単純パーセプトロンで分類(MATLAB)【数値計算】

MATLAB、Python、Scilab、Julia比較ページはこちら
https://www.simulationroom999.com/blog/comparison-of-matlab-python-scilab/

はじめに

の、

MATLAB,Python,Scilab,Julia比較 第4章 その68【単純パーセプトロンで分類④】

を書き直したもの。

単純パーセプトロンで分類を行う。
今回はMATLABで実現。

単純パーセプトロンで分類のプログラムのフロー【再掲】

単純パーセプトロンで分類するプログラムのフローを再掲。

  • データセットの定義
  • ハイパーパラメータの設定
    • 学習率
    • エポック数
  • パラメータの初期値、
  • シグモイド関数の導関数の定義
  • 順伝播
    • 誤差計測
  • 逆伝播
    • バイアスの逆伝播
    • 重みの逆伝播
  • パラメータの更新
  • 重みの変化の経緯をplot

重みとバイアスへの連鎖律への共通式

\(
\begin{eqnarray}
\displaystyle dZ&=&\frac{\partial E}{\partial A}\frac{\partial A}{\partial Z}=(A-Y)\cdot\sigma(Z)\{1-\sigma(Z)\}\cdot X\\
&=&
\Bigg(
\begin{bmatrix}
a_1\\a_2\\a_3\\a_4
\end{bmatrix}-
\begin{bmatrix}
0\\0\\0\\1
\end{bmatrix}
\Bigg)\circ
\sigma\Bigg(
\begin{bmatrix}
z_1\\z_2\\z_3\\z_4
\end{bmatrix}
\Bigg\{
1-\sigma\Bigg(
\begin{bmatrix}
z_1\\z_2\\z_3\\z_4
\end{bmatrix}
\Bigg)
\Bigg\}
\end{eqnarray}
\)

重みへの連鎖律

\(
\displaystyle\frac{\partial E}{\partial W}=dZ^TX=
\begin{bmatrix}
dz_1\\dz_2\\dz_3\\dz_4
\end{bmatrix}^T
\begin{bmatrix}
0&0\\
0&1\\
1&0\\
1&1\\
\end{bmatrix}
\)

バイアスの連鎖律

\(
\displaystyle\frac{\partial E}{\partial b}=\sum dZ=
\begin{bmatrix}
dz_1\\dz_2\\dz_3\\dz_4
\end{bmatrix}^T
\begin{bmatrix}
1\\1\\1\\1
\end{bmatrix}
\)

これをMATLABで実現する。

MATLABコード

MATLABコードは以下。

% シグモイド関数の定義
sigmoid = @(x) 1./(1 + exp(-x));

% シグモイド関数の導関数の定義
sigmoid_derivative = @(x) sigmoid(x).*(1 - sigmoid(x));

% データセットの定義
X = [0 0; 0 1; 1 0; 1 1];
Y = [0; 0; 0; 1];

% ハイパーパラメータの設定
learning_rate = 0.5; % 学習率の調整
num_epochs = 200; % エポック数の調整

% パラメータの初期値
W = randn(1, size(X, 2));
b = randn();

for epoch = 1:num_epochs
    % 順伝播
    Z = X * W' + b;
    A = sigmoid(Z);

    % 誤差計測
    loss = mean((A - Y).^2);

    % 逆伝播
    dZ = (A - Y) .* sigmoid_derivative(Z);
    dW = dZ' * X;
    db = sum(dZ);

    % パラメータの更新
    W = W - learning_rate * dW;
    b = b - learning_rate * db;

end

fprintf('W=');disp(W);
fprintf('b=');disp(b);

hold on;
scatter(X(Y == 0, 1), X(Y == 0, 2), 'filled', 'MarkerFaceColor', 'r');
scatter(X(Y == 1, 1), X(Y == 1, 2), 'filled', 'MarkerFaceColor', 'b');
x1 = [min(X(:, 1))-1 max(X(:, 1))+1];
x2 = -(W(1)*x1 + b) / W(2);
plot(x1, x2, 'k', 'LineWidth', 2);
xlim([-0.5 1.5]);
ylim([-0.5 1.5]);
title(sprintf('Epoch: %d, Loss: %.4f', epoch, loss));
legend('Class 0', 'Class 1', 'Decision Boundary');
grid;
hold off;

処理結果

処理結果は以下。

単純パーセプトロンで分類(MATLAB)
W=    2.9305    2.9390

b=   -4.5204

まとめ

  • 単純パーセプトロンの分類をMATLABで実施。
    • 想定通り分類可能。
  • おおよそ200エポックあれば分類可能。

MATLAB、Python、Scilab、Julia比較ページはこちら

Pythonで動かして学ぶ!あたらしい線形代数の教科書

Amazon.co.jp: Pythonで動かして学ぶ!あたらしい線形代数の教科書 eBook : かくあき: Kindleストア
Amazon.co.jp: Pythonで動かして学ぶ!あたらしい線形代数の教科書 eBook : かくあき: Kindleストア

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装 | 斎藤 康毅 |本 | 通販 | Amazon
Amazonで斎藤 康毅のゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装。アマゾンならポイント還元本が多数。斎藤 康毅作品ほか、お急ぎ便対象商品は当日お届けも可能。またゼロから作るDeep Lea...

ゼロからはじめるPID制御

ゼロからはじめるPID制御 | 熊谷 英樹 |本 | 通販 | Amazon
Amazonで熊谷 英樹のゼロからはじめるPID制御。アマゾンならポイント還元本が多数。熊谷 英樹作品ほか、お急ぎ便対象商品は当日お届けも可能。またゼロからはじめるPID制御もアマゾン配送商品なら通常配送無料。

OpenCVによる画像処理入門

OpenCVによる画像処理入門 改訂第3版 (KS情報科学専門書) | 小枝 正直, 上田 悦子, 中村 恭之 |本 | 通販 | Amazon
Amazonで小枝 正直, 上田 悦子, 中村 恭之のOpenCVによる画像処理入門 改訂第3版 (KS情報科学専門書)。アマゾンならポイント還元本が多数。小枝 正直, 上田 悦子, 中村 恭之作品ほか、お急ぎ便対象商品は当日お届けも可能。...

恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]

恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門] | 金城俊哉 | 数学 | Kindleストア | Amazon
Amazonで金城俊哉の恋する統計学 恋する統計学。アマゾンならポイント還元本が多数。一度購入いただいた電子書籍は、KindleおよびFire端末、スマートフォンやタブレットなど、様々な端末でもお楽しみいただけます。

Pythonによる制御工学入門

Amazon.co.jp

理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析

Amazon.co.jp

コメント

タイトルとURLをコピーしました