感知机和神经网络及三种激活函数

《深度学习入门·基于Python的理论与实现》

*感知机*——神经网络(深度学习)起源算法。接收多个信号,输出一个信号【信号取值只有0/1,0代表“不传递信号”,1代表“传递信号”】

*激活函数*——连接感知机和神经网络的桥梁

*朴素感知机*——单层网络,激活函数使用阶跃函数

*多层感知机*——神经网络,使用sigmoid函数等平滑的激活函数的多层网络

一、

1.激活函数

a. sigmoid函数:e=2.7182

h(x)=\frac{1}{1+exp(-x)}   

使得神经网络中流动的是连续的实数值信号,平滑性

注:阶跃函数和sigmoid函数都属于非线性函数(线性函数h(x)=cx),神经网络的激活函数必须使用非线性函数

b. ReLU函数(Rectified Linear Unit):输入大于0时,直接输出该值;小于等于0时,输出0

h(x)=\left\{\begin{matrix} x (x>0)\\ 0(x\leq 0) \end{matrix}\right.

二、三层神经网络的实现

输入层(0层)有两个神经元,第1个隐藏层(第1层)有3个神经元,第2个隐藏层(第2层)有两个神经元,输出层(第3层)有两个神经元

  • 回归问题——可以使用恒等函数(y=x)
  • 二元分类问题——可以使用sigmoid函数
  • 多元分类问题——可以使用softmax函数
def softmax(a):
    c = np.max(a)
    exp_a = np.exp(a-c)
    sun_exp_a = np.sum(exp_a)
    y = exp_a/sun_exp_a
    return y

使用softmax出现的问题:当exp(a)中,a=1000时,结果为inf(无限大),溢出。在超大值之间进行除法运算时,结果会出现“不确定”的情况。

在使用softmax进行运算时,加上或减去某个常数不会改变运算的结果

注意:softmax函数输出值的总和为1

三、神经网络的学习

“学习”——从训练数据中自动获取最优权重参数的过程,引入损失函数——学习的目的,即损失函数尽可能小

  • 线性可分问题,通过有限次数的学习,可解
  • 非线性可分问题,无法通过自动学习来解决

在计算机视觉领域常用的特征量包括:SIFT、SURF、HOG

1、损失函数

a. 均方误差(mean squared)

E=\frac{1}{2}\sum_{k}(y_{k}-t_{k})^{2}

  • yk-神经网络的输出
  • tk-监督数据
  • k-数据的维数

b. 交叉熵误差(cross entropy error)

E = - \sum_{k}t_{k}log(y_{k})

  • log-以e为底
  • tk-正确解标签(是为1,错为0)
  • yk-神经网络的输出

2、数值微分

导数:表示某个瞬间的变化量

\frac{df(x)}{dx}=\lim_{h\rightarrow 0}\frac{f(x+h)-f(x)}{h}

def numerical_diff(f,h):
    h=1e-4
    return (f(x+h)-f(x-h))/(2*h)

猜你喜欢

转载自blog.csdn.net/qq_39883358/article/details/84999809