机器学习---神经网络前向传播

       前向传播(Frontpropagation)

        我们之前学习了几种线性的分类回归方法,但是当我们有大量的数据时这种回归方式的效率可能会较为低下。由此,我们模拟了我们人体的神经元的工作方式设计出了神经网路。其模式图如下:

         X向量为输入的数据,经过Sigmoid运算之后输出h(x),这就是一个简单的神经网络。通常,在x_{1}上方我们还会有一个x_{0}=1的“偏置单元”,同样也参与运算,随着我们增加网络的层级,神经网络的模式图如下:

        我们称图中第一层为输入层(Input Layer),第三层为输出层(Output Layer),其余所有层级我们都称为隐藏层(Hidden Layer),在每一层之间我们有不同的\Theta向量来对X向量进行Sigmoid运算。

        以第一层到第二层为例,X = \begin{bmatrix}1 & x_{1} & x_{2} & ... & x_{n} \end{bmatrix}\Theta = \begin{bmatrix} 1 & \Theta_{01} & \Theta_{02} & ... & \Theta_{0n} \\ 1 & \Theta_{11} & \Theta_{12} & ... & \Theta_{1n} \\ 1 & \Theta_{21} & \Theta_{22} & ... & \Theta_{2n} \\ ...& ...& ... & ...& ...\\ 1 & \Theta_{m1} & \Theta_{m2} & ... & \Theta_{mn} \end{bmatrix},其中1皆为偏置单元,图中并未画出,Sigmoid(\Theta* X)= A\ \ \ \ \ \ A = \begin{bmatrix}1 & a^{(2)}_{1} & a^{(2)}_{2} & ... & a^{(2)}_{n} \end{bmatrix},A向量又作为下一层的输入进行下一层的运算,a的上角标(2)表示这是第二层的数据,以此类推,将每一层的数据的都进行乘积以及SIgmoid计算之后由输出层输出即可得到最终神经网路运算的结果。然后就可以直接计算代价函数

          下为Octave/Matlab描述:

function [J grad] = nnCostFunction(nn_params, ...
                                   input_layer_size, ...
                                   hidden_layer_size, ...
                                   num_labels, ...
                                   X, y, lambda)
Theta1 = reshape(nn_params(1:hidden_layer_size * (input_layer_size + 1)), ...
                 hidden_layer_size, (input_layer_size + 1));

Theta2 = reshape(nn_params((1 + (hidden_layer_size * (input_layer_size + 1))):end), ...
                 num_labels, (hidden_layer_size + 1));

m = size(X, 1);
         
J = 0;
Theta1_grad = zeros(size(Theta1));
Theta2_grad = zeros(size(Theta2));

Y = zeros(m, size(Theta2, 1));
for i = 1: size(Theta2, 1);
    Y(find(y == i), i) = 1; 
end;

a1 = [ones(m, 1), X];
z2 = a1 * Theta1';
a2 = sigmoid(z2);
a2 = [ones(m, 1), a2];
z3 = a2 * Theta2';
a3 = sigmoid(z3);

J = (-1 / m) * sum(sum(Y .* log(a3) + (1 - Y) .* log(1 - a3))) ...
    + (lambda / (2*m)) * (sum(sum(Theta1 .^ 2)) + sum(sum(Theta2 .^ 2)));

end

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LXTTTTTTTT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值