神经网络(NN)基础知识

预备知识——常用函数

np.random.RandomState.rand(),返回一个[0,1)的随机数

np.vstack(数组1,数组2),将两个数组按垂直方向叠加

tf.where(条件语句,真返回A,假返回B)

tf.greater(a,b),判断a是否大于b

使用下面三种函数生成网格:

np.mgrid[起始值:结束值:步长,起始值:结束值:步长,...]

x.ravel(),将x变为一维数组,把把变量拉直

np.c_[],返回的间隔数值点配对——np.c_[数值1,数值2,...]

复杂度

NN(神经网络)复杂度:多用NN层和NN参数的个数表示

空间复杂度:

层数=隐藏层的层数+1个输出层

下图为2层

总参数=总w+总b

3*4+4 +4*2+2

时间复杂度:

乘加运算次数

3*4+4*2

学习率

指数衰减学习率

可以先使用较大的学习率,快速得到最优解,然后逐步减少学习率,使用模型在训练后期稳定

激活函数

 Sigmoid函数

 tf.nn.sigmoid(x)


\frac{1}{1+e^{-x}}

 特点:易造成梯度消失,输出非0均值,收敛慢,幂运算复杂,训练时间长。

Tanh函数

 tf.math.tanh(x)

\frac{1-e^{-2x}}{1+e^{-2x}}

特点:输出是0均值,易造成梯度消失,幂运算复杂,训练时间长

Relu函数

 tf.nn.relu(x)

f(x)=max(x)=\left\{\begin{matrix} 0 &x<0 \\ x&x>=0 \end{matrix}\right.

 优点:解决了梯度消失问题(在正区间),只需判断输入是否大于0,计算速度快,苏联速度远大于上面两个函数

缺点:输出非0均值,收敛慢,Dead Relu问题:某些神经元可能永远不会被激活,导致相应的参数永远不会被更新

损失函数

预测值与已知答案的差距。

NN优化目标:loss最小

loss=\left\{\begin{matrix} mes(Mean Squared Error)\\ ''\\ce(Cross Entropy) \end{matrix}\right.

 均方误差,自定义,交叉熵

\frac{\sum(y-y_)^{2} }{n}

 tf.reduce_mean(tf.square(y_-y)

-\sum y_*lny

tf.losses.categorical_crossentropy(y_,y)

过拟合——正则化

正则化在损失函数中引入模型复杂度指标,利用给w加权,弱化了训练数据的噪声

loss_{L1}(w)=\sum |w_{i}| 

 loss_{L1}(w)=\sum |w_{i}^{2}|

L1正则化大概率会使很多参数变为0,因此该方法可以通过稀疏矩阵参数,减少参数数量,降低复杂度

L2正则化会使参数接近零但是不等于零,减少参数的值降低复杂度 

 优化器

w_{t+1}=w_{t}-lr*m_{t}/(\sqrt{v_{t}})

随机梯度下降(SGD)

一阶动量mt为梯度gt,二阶动量恒等于1

w_{t+1}=w_{t}-lr*g_{t}

 SGDM

在SGD基础上增加一阶动量

m_{t}=\beta *m_{t-1}+(1- \beta)*g_{t}

 Adagrad

在SDG基础说增加二阶动量vt

v_{t}=\sum g\tfrac{2}{t}

 RMSProp

在SGD基础上增加二阶动量

v_{t}=\beta*v_{t-1}+(1-\beta)*g\tfrac{2}{t}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值