1. 神经网络层数
= 隐层数+输出层(1)
输入不算是一层,可以说是第0层
W[1]可以用来表示是第1层的参数
隐层:在网络中是看不到它的
激活值:当前层会传递给下一层的值如a[0]表示输入层会传给第一层的值
2. 一层中有多个神经元,然后它们可以做相同的事
3.几种激活函数:
sigmoid: a = 1/(1+e^-z) 只用于二元分类输出层
tanh: a = (e^z - e^-z)/(e^z + e^-z) 缺点:和simoid一样当z很大/小时斜率趋于0,使得梯度下降效果弱
ReLU:a = max(0,z) 一般会采用这个
4.为什么要用非线性激活函数
线性函数得出的关系比较简单,不足以描述现实中复杂的关系
5. 不能把所有变量都初始化为0
如果把w初始化为0,那么多个神经元的计算就会是一样的(对称性),归纳可得不管多少次后也是一样的结果。则多个神经元也变得没有意义
随机初始化W=np.randm.radn((2,2))*0.01 这里0.01是因为希望得到的W不要太大,因为激活函数在变量绝对值较大的位置变化比较平缓
6. 反向计算求导
计算dz[1]时把a[1]=g[1](z[1])代入z[2]的公式中