我们先回顾逻辑回归的正向传播过程,如果有m个训练样本,对第一个样本进行预测,需要计算出z,并计算激活函数,计算第一个样本的
y^?,如下所示:
z(1)=wT?x(1)+b
a(1)=σ(z(1))然后继续对第二个训练样本做一个预测,计算如下:
z(2)=wT?x(2)+b
a(2)=σ(z(2))以此类推,你可能需要这样做上m次。
为了执行正向传播步骤,需要对m个训练样本都计算出预测结果,但是有一个办法,不需要任何一个显式的for循环。我们曾定义过一个矩阵X作为训练输入,类似于将不同的列堆叠在一起。
现在首先要做的是,如何计算
z(1)等,这些计算全在一个步骤中。首先构建一个
1?m的矩阵,实际上就是一个行向量,表示为
[z(1),z(2),...,z(m)]都是在同一时间内,它可以表达成
[z(1),z(2),...,z(m)]=wT?X?[b,b,...,b]公式中的
[b,b,...,b]是一个
1?m的矩阵,或者说是一个m维的行向量。
矩阵X是把所有训练样本堆叠起来得到的,上面的向量化计算方法可以在python中写为
Z=np.dot(wT,X)+b公式中有个python比较巧妙的地方,公式中的b是一个实数,或者说是一个
1?1的矩阵,就是一个普通的实数。但是当把向量加上这个实数时,python会自动的把实数b扩展成一个
1?m的行向量,在python中这叫做广播。Z是一个
1?m的矩阵,包含所有小写z。
通过上面计算得到Z,对于变量a,我们需要堆叠a形成一个新的变量,即
[a(1),a(1),...,a(m)],我们把它定义为大写A。