深度学习入门笔记(1)

(1)损失函数:不再使用\large \frac{1}{2}\left | \hat{y}-y \right |^{2}新的损失函数为\large L(\hat{y},y)=-(ylog(\hat{y})+(1-y)log(1-\hat{y}))。通常损失函数是指一个样本计算的结果,对于m个样本产生的误差函数为成本函数\large J(\omega,b)=\sum _{i=1}^{m}L(\hat{y}^{(i)},y^{(i)})

(2)向量化:为了显式地减少代码中使用的for循环,可以用numpy库进行简化运算,\large z=\omega^{T}x+b可以用\large z=np.dot(\omega,x)+b来完成,而不用根据每个样本,每维特征进行二重的循环。向量化是一个很重要的思想,它能大幅度地减少循环的使用。

(3)python广播:python在矩阵计算中会自动地将维数低的向量扩展至相应大小的向量来进行计算,例如\large z=np.dot(\omega,x)+b中b可以是一个1x1的矩阵,python会自动复制b中的值来进行扩展。但需要注意的是python在自动补齐时有可能会生成秩为1的数组,此类数组无法进行转置,但又不会直接报错,从而影响计算结果导致很难debug,所以在矩阵运算的时候最好规定矩阵的大小,尤其是向量,例如在生成一个10x1的向量时尽量使用np.random.randn(10,1)而非np.random.randn(10,)

(4)对于神经网络的反向传播的计算过程的推导,只需选择其中一个传播路径然后不断使用链式法则来求得各处的\large d\omega\large db以便于进行参数的更新\large \omega=\omega-\alpha d\omega

(5)矩阵维数的核对:设第l层的神经元的个数为\large n^{[l]},则每层的计算结果\large z^{[l]}的维数为(\large n^{[l]},1),每层神经元的输入特征维数为             (\large n^{[l-1]},1),由于\large z^{[l]}=(\omega^{[l]})^{T}x+b^{[l]},根据矩阵的乘法可以知道\large \omega^{[l]}的维数为(\large n^{[l]}\large n^{[l-1]}),\large b^{[l]}的维数则与\large z^{[l]}一致

猜你喜欢

转载自blog.csdn.net/bao960704/article/details/82533740