Matlab向量化编程实现机器学习算法---2

本文介绍了如何使用Matlab进行向量化编程,以提高机器学习算法的效率。内容源于Stanford大学Andrew Ng的文章,探讨了在神经网络中应用向量化编程的实践方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2. 神经网络---正向传播

      考虑一个三层神经网络(一个输入层、一个隐含层、以及一个输出层),并且假定x是包含一个单一训练样本的列向量。则向量化的正向传播步骤如下:

z2 = w1.x + b1
a2 = f(z2)
z3 = w2.a2 + b2
h(x) = a3 = f(z3)

当我们需要处理m个训练样本时,则需要把如上步骤放入一个for循环中:

% 非向量化实现
for i=1:m,
   z2 = W1 * x(:,i) + b1;
   a2 = f(z2);
   z3 = W2 * a2 + b2;
   h(:,i) = f(z3);
end;

z2,a2,z3都是列向量,分别用来计算隐层和输出层的激励结果。为了充分利用并行化和高效矩阵运算的优势,我们希望算法能同时处理多个训练样本。让我们先暂时忽略前面公式中的b1和b2(把它们设置为0),那么可以实现如下:

% 向量化实现 (忽略 b1, b2)
z2 = W1 * x;
a2 = f(z2);
z3 = W2 * a2;
h = f(z3)

在这个实现中,z2,a2,z3都是矩阵,每个训练样本对应矩阵的一列。在对多个训练样本实现向量化时常用的设计模式是,虽然前面每个样本对应一个列向量(比如z2),但我们可把这些列向量堆叠成一个矩阵以充分享受矩阵运算带来的好处。这样,在这个例子中,a2就成了一个s2 X m的矩阵(s2是网络第二层中的神经元数,m是训练样本个数)。矩阵a2的含义是,当第i个训练样本x(:i)输入到网络中时,它的第i列就表示这个输入信号对隐神经元 (网络第二层)的激励结果。


在上面的实现中,我们假定激活函数f(z)接受矩阵形式的输入z,并对输入矩阵按列分别施以激活函数。假定激活函数采用Sigmoid函数,则实现代码如下所示:

%
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值