《深度学习入门》学习笔记四:神经网络(上)

一、从感知机到神经网络

上一次我们学习了感知机,但是感知机的权重是需要人为地输入的,因此人们发明了神经网络,能够自动地从数据中学习到合适的权重参数。

1、例子

在这里插入图片描述
此图是一个经典的神经网络,最左边是输入层,最右边是输出层,中间的叫作中间层,也叫隐藏层,隐藏层的神经元是看不见的。在《深度学习入门》一书中,将输入层到输出层依次称为第0层、第1层、第2层。

2、激活函数

在感知机模型中,我们会有一个 h ( x ) h(x) h(x)函数,即那个超过阈值的判定为1,没超过阈值判定为0诸如此类的函数来输出 y y y。而在神经网络中,我们称之为激活函数,常见的神经网络中的激活函数包括sigmoid、ReLU

2.1、sigmoid函数

公式:
h ( x ) = 1 1 + e x p ( − x ) h(x)=\frac{1}{1+exp(-x)} h(x)=1+exp(x)1
sigmoid函数与阶跃函数的比较
在感知机中我们往往使用的是阶跃函数,而在神经网络中则不然,这就是感知机和神经网络的区别。

import numpy as np
import matplotlib.pyplot as plt
def step(x):
    #阶跃函数
    return np.array(x > 0, dtype = np.int)

def sigmoid(x):
    #sigmoid函数
    return 1/(1+np.exp(-x))

x = np.arange(-5.0, 5.0, 0.1)
y1 = step(x)
y2 = sigmoid(x)
plt.plot(x,y1,x,y2)
plt.show()

最终得到结果
在这里插入图片描述
我们看到sigmoid函数是一条平滑的曲线,而阶跃函数输出会发生急剧性的变化,sigmoid函数的平滑性对神经网络的学习具有重要的意义。同时感知机中流动的只有0和1两种信号,而神经网络中流动的是连续的实数信号
在阶跃函数和sigmoid函数中我们可以看到两者结构都是输入小时,输出为0,输入大时,输出为1,两者的值域都是从0到1。二者都属于非线性函数。

2.2、非线性函数

神经网络的激活函数必须使用非线性函数,因为如果使用了线性函数的话,加深神经网络的层数就没有意义了。比如说假设 h ( x ) = c x h(x)=cx h(x)=cx是激活函数, y = h ( h ( h ( x ) ) ) y=h(h(h(x))) y=h(h(h(x)))作为对应的三层神经网络,最后 y = c 3 x y=c^3x y=c3x但是这同样能用 y = a x ( a = c 3 ) y=ax(a=c^3) y=ax(a=c3)来表示。这样三层的神经网络就变成了没有隐藏层,无法发挥多层网络的优势。

2.3、ReLU函数

ReLU函数是最近主要使用的函数。
公式:

y = { x ( x ≥ 0 ) 0 ( x < 0 ) y=\left\{ \begin{aligned} x&&(x\ge0) \\ 0&&(x<0) \\ \end{aligned} \right. y={x0(x0)(x<0)

def relu(x):
    return np.maximum(x,0)

在这里插入图片描述

posted @ 2022-09-04 00:12  NocKnow  阅读(47)  评论(0)    收藏  举报