神经网络的基本概念(以及tensorflow库)

 神经网络激活函数


单独的单变量线性分类器并不能带来神经网络的强悍性能。就算那些不是很复杂的机器学习问题都会涉及多变量和非线性,所以我们常常要用其他的转移函数来替代感知器中原本的转移函数。


有很多非线性函数可以用来做激活函数,从而表征不同的非线性模型。在输入同样的变量的时候,不同的激活函数有不同的响应。常用的激活函数如下:


- $ Logistic $ :典型的激活函数,在计算分类的概率时非常有用。


   $ f(z)=\frac{1}{1+exp(-z)} $ 


- $ Tanh $ :跟 $ Sigmoid $ 函数很像,但是范围是 $ [-1,1] $ ,而不是 $ [0,1] $ 。


   $ f(z)=tanh(z)=\frac{e^{z}-e^{-z}}{e^{z}+e^{-z}} $ 


- $ Relu $ :修正线性函数,该函数主要是为了对抗梯度消失。也就是当梯度反向传播到第一层的时候,梯度容易趋近于 $ 0 $ 或者一个极小值。


   $ f(x)=max(0, x) $ 


在我们计算总的误差的时候,因为是一整个函数作用于输入数据,所以我们要调整这个方程中的所有变量,来最小化方程。


怎样最小化误差呢?正如我们在优化部分所学,我们通过损失函数的梯度来最小化误差。


如果我们的网络拥有多层权重和转移函数,我们最终需要通过链式法则来求导所有参数的梯度。


TensorFlow 激活函数


最常用的激活函数如下:


-  $ tf.sigmoid(x) $ :标准的 $ sigmoid $ 函数;
-  $ tf.tanh(x) $ :双曲正切函数;
-  $ tf.nn.relu(x) $ :修正线性函数;


 $ TensorFlow $ 中其他的函数:


-  $ tf.nn.elu(x) $ :指数线性单元;如果输入小于 $ 0 $ ,返回 $ exp(x)-1 $ ;否则,返回 $ x $ ;
-  $ tf.softsign(x) $ :返回 $ \frac{x}{abs(x)+1} $ ;

-  $ tf.nn.bias\_add(value,bias) $ :增加一个 $ bias $ 到 $ value $ 。


 TensorFlow 中损失优化方法


-  $ tf.train.GradientDescentOptimizer(learning\_rate, use\_locking, name) $ :原始梯度下降方法,唯一参数就是学习率。
-  $ tf.train.AdagradOptimizer $ :自适应调整学习率,累加历史梯度的平方,作为分母,防止有些方向的梯度值过大,提高优化效率,善于处理稀疏梯度。
-  $ tf.train.AdadeltaOptimizer $ :扩展 $ AdaGrad $ 优化方法,只累加最近的梯度值,而不对整个历史上的梯度值进行累加。
-  $ tf.train.AdamOptimizertf.train.AdamOptimizer. (learningrate, beta1, beta2, epsilon, use\ locking, name) $ :梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。 $ Adam $ 是自适应矩估计( $ Adaptive\ Moment\ Estimation $ )的首字母缩写。

猜你喜欢

转载自blog.csdn.net/qq_35307005/article/details/80553982