在前面的一些关于机器案例中使用了激活函数,
如 机器学习(1)--神经网络初探 开篇中的 tanh(x)与tanh_deriv(x)两个函数
TensorFlow实例(5.1)--MNIST手写数字进阶算法(卷积神经网络CNN) 中在最大池化时使用的 tf.nn.relu
我们为什么要使用激活函数,通常他有如下一些性质:
非线性: 如果是线性的时候,多层的神经网络是无意义的
可微性: 做梯度下降,这是不可少的
单调性: 如果是非单调的,那么无法保证网络是凸函数。
全是高数的东东,看着晕,相当的感觉用处不大,如果你数学足够好,自己能创建或写出新的激活函数,
立马觉得我这写得太简单,然后一块豆腐把我拍个半死,丫的什么都不懂
如果你数学和我一样不太好,那就用用别人常用的就好了,所以卵用没有,纯粹为了假装很懂,让你不明觉厉
激活函数用在什么地方
如 机器学习(1)--神经网络初探 开篇中的 tanh(x)与tanh_deriv(x)两个函数
TensorFlow实例(5.1)--MNIST手写数字进阶算法(卷积神经网络CNN) 中在最大池化时使用的 tf.nn.relu
我们为什么要使用激活函数,通常他有如下一些性质:
非线性: 如果是线性的时候,多层的神经网络是无意义的
可微性: 做梯度下降,这是不可少的
单调性: 如果是非单调的,那么无法保证网络是凸函数。
全是高数的东东,看着晕,相当的感觉用处不大,如果你数学足够好,自己能创建或写出新的激活函数,
立马觉得我这写得太简单,然后一块豆腐把我拍个半死,丫的什么都不懂
如果你数学和我一样不太好,那就用用别人常用的就好了,所以卵用没有,纯粹为了假装很懂,让你不明觉厉
激活函数用在什么地方
当我们定义好神经网络层,并在每两层间做完矩阵乘法计算weight时,即np.dot后,
我们设val=np.dot(w,x),这时我们会再调用激活函数,如tanh(val)
当神经网络正向计算完后,进行反向计算时,
通过 y(实际值)-y(计算值)求出误差error ,通过error * tanh_deriv() 可以得到我们要调整的值
基中tanh_deriv是tanh的导数,所以激活函数一定是成对出现,正向使用激活函数,反向使用激活函数的导数 <