博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对激活函数的理解
阅读量:6793 次
发布时间:2019-06-26

本文共 979 字,大约阅读时间需要 3 分钟。

在完成Z=X*W.T+b后,我们需要一个激活函数,把Z变成另外一个值,然后传到神经网络的下一层去

在神经网络的输出层,我们需要将最后的Z通过激活函数,转换成我们需要的答案

 

输出层需要激活函数很好理解,总不能把Z输出,搞得程序最后运行得出一个奇奇怪怪的东西吧

在隐藏层中,如果我们不需要激活函数,那我们先假设隐藏函数只有一层

x[1][1] = X[0]*W[1][1]+b[1][1]

x[1][2] = X[0]*W[1][2]+b[1][2]

x[1][3] = X[0]*W[1][3]+b[1][3]

Z= X[1]*W[2][1]+b[2][1]

化简得

Z = k1*x1+k2*x2+k3*x3+B

也就是说,过了一整个神经网络,我的训练效果差不多就是那一个节点的训练效果

emmmmmm

而如果有了激活函数

就可以把线性的东西变成非线性的,这到底有什么用呢?

现在我们来看看常用的激活函数

1.  sigmoid(z)

   f(z)=1/(1+e^(-z))

   

 

2.  tanh(Z)

   tanh(Z) = (e^x-e^(-x))/(e^x+e^(-x))

   

 

3.  max(Z,0)

   

 

4.  max(Z,0.01Z)

   

 

 

 对于二元分类(最后输出结果为1 or 0的神经网络)

我们一般用的是前两种激活函数,其中用的最多的是第二种

可以看到,这两种神经网络的倒数都有一个特点,就是在x足够大,或者足够小的时候导数接近于0,而x接近于0的时候,导数较大

因为我们输出0 or 1嘛,然后最后的输出又是由sigmoid函数输出的

所以我们要尽量让x远离0,已得到一个确切的,正确的结果。

也就是说,在x已经远离0且是正确的情况下,我们的W,b参数基本上是不用动的

而在x接近0的情况下,我们要让x往正确的方向,偏离尽可能的远,所以这个时候导数要尽量大

至于最后的两个,在特定的情况下,也有他们的优缺点。

 

对于特定的问题,我们可以试着调整激活函数,看能不能提高精度。

其实直觉告诉我,最优解在,函数越多越好,越少越好,每一层用的种类越多越好,每一层都相同,然后各层的激活函数不同之中

下个星期可以试试

 

转载于:https://www.cnblogs.com/shensobaolibin/p/7931906.html

你可能感兴趣的文章
servlet 产生验证码
查看>>
java里怎样在客户端获取response的Cookie
查看>>
quick lua下自定义事件处理
查看>>
tomcat 启动报 操作系统找不到已输入的环境选项
查看>>
10进制转换, 输出字符
查看>>
svg在线生成器地址
查看>>
Fikker 自建CDN的安装说明
查看>>
生产环境修改PostgreSQL表索引对应的表空间
查看>>
浅谈C++多态性
查看>>
Linux用户和组管理
查看>>
Javascript模块化编程
查看>>
内存分配 、同步、互斥
查看>>
js 删除数组下标
查看>>
互联网创业者,你的域名被“注册”了吗?
查看>>
tomcat 设置编码
查看>>
javadoc工具生成自己的API文档
查看>>
微服务框架下的思维变化-OSS.Core基础思路
查看>>
android viewHolder处理listView滑动
查看>>
JAVA泛型——转
查看>>
Python 中因urllib2/urlib遭遇的进程阻塞问题
查看>>