一、神经网络基础
typora-copy-images-to: ipic
一、神经网络基础
1.logistic回归
即使用sigmoid
激活函数处理一个简单的神经网络 ,将其输出映射到区间(0,1)之间,方便做二分类。其中W、b为神经网络的两个参数矩阵。
sigmoid
函数:
2.logistic回归的损失函数
定义一个凸函数(容易优化),来衡量预测值和真实值之前的差距,即衡量模型在训练样本上的表现。
在logistic常用对数损失函数衡量模型表现:
对于单个样本:
衡量单个样本的预测准确性。
对于全部样本:
衡量参数W、b的效果。
3.梯度下降法(Gradient Descent)
即minimize 的方法。
沿着成本函数 下降最快的方向更新参数W、b,以罩到全局最优解使得成本函数最小。
算法实现:
-
初始化参数
-
求当前位置损失函数的梯度(下降最快的方向、导数/偏导数)
-
用步长(学习率)* 梯度确定下降的距离
-
确定下降的距离是否小于阈值,判断是否需要继续
-
更新参数
-
确定更新参数后的损失函数是否小于阈值
4.导数(emmm...)
请兄弟姐妹们自行翻微积分课程。
即函数在某个点的变化率,是函数的一个局部性质。
5.计算图及其导数计算
计算图即正向传播计算输出,反向传播计算导数的过程。
6.向量化
使用python的numpy
库,消除代码中的显性for循环,让代码在大规模数据中的运算更加高效。
在神经网络的构建中,尽量避免使用for循环,以免影响计算效率。
Numpy文档:http://www.numpy.org
向量化的计算速度显著优于for循环,且随着数据量上升,优势会更加明显。
总之:尽量避免使用显性的for循环,向量化的计算会显著提醒计算速度。
但是在循环梯度下降时,目前还没有更好的办法代替for循环。
7.Python的广播
Numpy的Universal functions 中要求输入的数组shape是一致的,当数组的shape不想等的时候,则会使用广播机制,调整数组使得shape一样,满足规则,则可以运算,否则就出错。
广播主要发生在两种情况,一种是两个数组的维数不相等,但是它们的后缘维度((trailing dimension,即从末尾开始算起的维度))的轴长相等,另外一种是有一方的长度为1。