Activation functions

Activation functions

基本激活函数

We know that the value of sigmoid function must between 0 and 1. But Andrew said that an activation almost always works better than the sigmoid functionand it is the hyperbolic tangent function tanh(x).

image-20220403135256935 Infact,tanh(x)=exexex+ex(1,1)xR

画上图网站Desmos

0.5tanhsigmabinaryclassification,sigmay^(0,1)sigma,tanh,

image-20220403141936155
gz[1]=W[1]x+b[1]a[1]=g[1](z[1])=tanh(z[1])z[2]=W[2]a[1]+b[2]a[2]=g[2](z[1])=σ(z[1])

zgradg0“slow down gradient descent”“rectified linear unit”线(ReLU)a=max(0,z)

image-20220403143635224
使z>0,binaryclassification(Andrewrulesofthumb())outputlayerσ,hiddenlayerReLU,
image-20220403144417696
则目前我们学习了四个激活函数:
image-20220403143635224

其中leaky是渗漏的意思,就是让小于零那一部分z还可以起到小小的作用🌹。而其中ReLU是不知道用啥时所用到的激活函数,事实上对于激活函数,或者对于函数中的细节改进,或者对于hidden layer中的单元数我们有很多种不同的选择,这也增大了我们的难度或者说是尝试的机会,或者像Andrew说的一样,you know try them all and then evaluate on like a holdout validation set.


接下来我们学习为什么需要非线性函数的原因:

z[1]=W[1]x+b[1]a[1]=g[1](z[1])z[2]=W[2]a[1]+b[2]a[2]=g[2](z[2])g[1](z[1])=z[1]linearactivationfunction;identityactivationfunction()线(1)a[2]=W[2]a[1]+b[2](2)=W[2](W[1]x+b[1])+b[2](3)=(W[2]W[1])x+(W[2]b[1]+b[2])(4)=Wx+by^x线y^=Wx+bxy^

image-20220403161834762
我们刚刚证明了如果隐藏层中都用线性激活函数和没有隐藏层的网络是等价的,所以既然我们建立了所谓的神经网络,就更加应该去让每一层的传播变得有意义起来,如果这里需要用到线性,我们可以把它交给参数W决定就好,而无需单独多建一层隐藏层,(其实没有隐藏层相当于回到了机器学习中的线性回归问题),到这里我们也就明白了为什么需要非线性激活函数的存在了。
  • 最后,笔者谈一下自己看法:其实我们更应该从物理层面去思考内在的激活函数关系,就好比六个对应自由度的值可以输出一个刚体的位姿,其内在肯定存在一个激活函数的模型,而不是建立很多隐层建立很多单元去逼近它,因为这样总是存在不能完全拟合的缺点,而且试错的快慢也需要由物质条件决定,但在现阶段难以得到更好结果的情况下用这种试错方法算是局部最优化了,我们好像也找不出理由不学习它。

激活函数的slope(斜率)和derivative(导数)

Sigmoidactivationfunction:g(x)=σ(x)=11+exddxg(x)=ex(1+ex)2=11+ex(111+ex)=g(x)(1g(x))a=g(z),g(z)=a(1a)

Tanhactivationfunction:g(x)=tanh(x)=exexex+exddxg(x)=(ex+ex)2(exex)2(ex+ex)2=4(ex+ex)2=1(tanh(x))2a=g(z),g(z)=1a2

ReLUandLeakyReLU:g(z)=max(0,z)g(z)={1 if z>00 if z<0undefined if z=0(z=001)()g(z)={0 if z<01 if z0g(z)=max(0.01z,z)g(z)={0.01 if z<01 if z0

画图matlab源代码

>> clear
>> 
>> syms x;
>> clear
>> syms z;
>> a=sigma(z);
索引超出数组元素的数目(1)。

出错 sigma (line 96)
  a=varargin{1}; b=varargin{2}; c=varargin{3}; d=varargin{4};
 
>> a=1/(1+e^(-z));
函数或变量 'e' 无法识别。
 
>> a=1/(1+exp^(-z));
错误使用 exp
输入参数的数目不足。
 
>> a=1/(1+exp(1)^(-z));
>> fplot(z)
>> plot(a,z)
错误使用 plot
数据必须为可转换为双精度值的数值、日期时间、持续时间或数组。% 老错误,plot不支持syms
 
>> clear
>> z=-2:0.01:2;
>> a=1/(1+exp(1)^(-z));
错误使用  ^  (line 51)
用于对矩阵求幂的维度不正确。请检查并确保矩阵为方阵并且幂为标量。要执行按元素矩阵求幂,请使用 '.^'。
 
>> 
>> a=1/(1+exp(1).^(-z));
错误使用  / 
矩阵维度必须一致。
 
>> a=1./(1+exp(1).^(-z));
>> plot(z)
>> 
>> plot(a)
>> z=-10:0.1:10;
>> a=1./(1+exp(1).^(-z));
>> plot(a)
>> plot(a)
>> subplot(2,2,1)
>> plot(a)
>> 
title('$\frac{sin(x)}{x}$','interpreter','latex', 'FontSize', 18); % 插入latex公式的方法
>> title('$sigmoid:a=\frac{1}{1+e^{-z}}$','interpreter','latex', 'FontSize', 18);
>> axis auto
>> plot(z,a)
>> subplot(2,2,2)
>> title('$tanh:a=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}$','interpreter','latex', 'FontSize', 18);
>> hold on;
>> subplot(2,2,1)
>> title('$sigmoid:a=\frac{1}{1+e^{-z}}$','interpreter','latex', 'FontSize', 18);
>> subplot(2,2,2)
>> a1=(exp(1).^(z)-exp(1).^(-z))/(exp(1).^(z)+exp(1).^(-z));
>> a1=(exp(1).^(z)-exp(1).^(-z))./(exp(1).^(z)+exp(1).^(-z));
>> plot(z,a1)
>> subplot(2,2,3)
>> title('$ReLU:a=max(0,z)$','interpreter','latex', 'FontSize', 18);
>> subplot(2,2,2)
>> title('$tanh:a=\frac{e^{z}-e^{-z}}{e^{z}+e^{-z}}$','interpreter','latex', 'FontSize', 18);
>> a2=z./2+abs(z).2;
 a2=z./2+abs(z).2;
               ↑
错误: 表达式无效。请检查缺失的乘法运算符、缺失或不对称的分隔符或者其他语法错误。要构造矩阵,请使用方括号而不是圆括号。
 
是不是想输入:
>> a2=z./2+abs(z)./2;
>> subplot(2,2,3)
>> plot(z,a2)
>> axis([-10,10,-10,10])
>> axis([-1,10,-10,10])
>> axis([-10,10,-1,10])
>> subplot(2,2,4)
>> title('$leaky\;ReLU:a=max(0.01z,z)$','interpreter','latex', 'FontSize', 18);
>> hold on
>> subplot(2,2,3)
>> title('$ReLU:a=max(0,z)$','interpreter','latex', 'FontSize', 18);
>> hold on
>> subplot(2,2,4)
>> a3=1.01.*z./2+abs(0.99.*z)./2;
>> plot(z,a3)
>> axis([-10,10,-1,10])
posted @   Link_kingdom  阅读(232)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示