前言
1959年,生物学家对青蛙神经元(synapse)机制的研究,发现了基本结构,
当多个输入的时候,输出并不是线性的,而是通过激活函数非线性输出.这里
重点研究一些常见的激活函数.
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CZ2QWY3YTNkRGZ5QzY2EWO1cjN0gDMyYDNykDMhVjY08CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
目录:
1: sigmod
2: tanh
3: relu
一 sigmod
该激活函数在机器学习classfication 里面应用比较多
定义
导数:
( x 为标量)
问题:
1 当x 特别大,或者特别小的时候,梯度接近为0,导致梯度弥散现象(参数无法更新)
2 梯度较小m,当网络层次较深的时候,会导致梯度消失.
当x 为向量时候
梯度
是一个对角矩阵
其中
代表逐元素求导,为向量.
在反向传播算法中,乘以一个向量,通常表示成内哈马达乘积
二 tanh 函数
该激活函数在RNN 里面应用比较多
定义:
导数:
三 RLU 函数
在深度学习中,应用最广的激活函数之一.
优点:
梯度为1
定义
导数
# -*- coding: utf-8 -*-
"""
Created on Wed Jan 11 17:18:22 2023
@author: chengxf2
"""
import torch
import matplotlib.pyplot as plt
from torch.nn import function as F
def tanh():
a = torch.linspace(-1, 1,10)
b = torch.tanh(a)
plt.plot(a,b,'go--')
plt.show()
'''
神经元synapse
'''
def sigmoid():
a = torch.linspace(-100, 100,100)
b = torch.sigmoid(a)
plt.plot(a,b,'go--')
plt.show()
def relc():
a = torch.linspace(-1, 1,10)
b = torch.relu(a)
plt.plot(a,b,'go--')
plt.show()
if __name__ == "__main__":
sigmoid()