感知机
给定输入X,权重w,偏移b,感知机输出

训练感知机
initialize w=0 and b=0 #此处的w直接取0
reprat
if yi[<wi,xi>+b]≤0 then
#此处表示预测错误,要使得≤0,若[<wi,xi>+b]≤0,对应如上公式,yi=-1,如此yi[<wi,xi>+b]必定不会≤0。反之同理
w<-w+yixi and b<-b+yi#对w和b进行更新
end if
until all classified correctly#直到所有类都分类正确
等价于使用批量大小为1的梯度下降,并使用如下损失函数

此处max(0,)相当于代码中的if语句,如果该类分类正确,(-y<w,x>)一定是大于0的,如果(-y<w,x>)为负数,则该类输出0,则梯度是常数就不会进行更新。
收敛定理

分截面对所有分类都正确,且有余量。
感知机的问题
感知机不能拟合XOR问题,只能产生线性分割面

多层感知机
学习XOR问题

按照单线性模型分类行不通因此可以分几步进行。
按照蓝线分类,按照黄线分类。

隐藏层
在网络中加入一个或多个隐藏层来克服线性模型的限制, 使其能处理更普遍的函数关系类型。 要做到这一点,最简单的方法是将许多全连接层堆叠在一起。 每一层都输出到上面的层,直到生成最后的输出。 我们可以把前 𝐿−1 层看作表示,把最后一层看作线性预测器。 这种架构通常称为多层感知机(multilayer perceptron),通常缩写为MLP。

这个多层感知机有4个输入,3个输出,其隐藏层包含5个隐藏单元。 输入层不涉及任何计算,因此使用此网络产生输出只需要实现隐藏层和输出层的计算。 因此,这个多层感知机中的层数为2。 注意,这两个层都是全连接的。 每个输入都会影响隐藏层中的每个神经元, 而隐藏层中的每个神经元又会影响输出层中的每个神经元。
具有全连接层的多层感知机的参数开销可能会高得令人望而却步。 即使在不改变输入或输出大小的情况下, 可能在参数节约和模型有效性之间进行权衡。
从线性到非线性
我们通过矩阵 𝐗∈ℝ𝑛×𝑑 来表示 𝑛 个样本的小批量, 其中每个样本具有 𝑑 个输入特征。 对于具有 ℎ 个隐藏单元的单隐藏层多层感知机, 用 𝐇∈ℝ𝑛×ℎ 表示隐藏层的输出, 称为隐藏表示(hidden representations)。 在数学或代码中, 𝐇 也被称为隐藏层变量(hidden-layer variable) 或隐藏变量(hidden variable)。 因为隐藏层和输出层都是全连接的, 所以我们有隐藏层权重 𝐖(1)∈ℝ𝑑×ℎ 和隐藏层偏置 𝐛(1)∈ℝ1×ℎ 以及输出层权重 𝐖(2)∈ℝℎ×𝑞 和输出层偏置 𝐛(2)∈ℝ1×𝑞 。 形式上,我们按如下方式计算单隐藏层多层感知机的输出 𝐎∈ℝ𝑛×𝑞 :

问题: 仿射函数的仿射函数本身就是仿射函数, 但是我们之前的线性模型已经能够表示任何仿射函数。
为了发挥多层架构的潜力, 我们还需要一个额外的关键要素: 在仿射变换之后对每个隐藏单元应用非线性的激活函数(activation function) 𝜎 。 激活函数的输出(例如, 𝜎(⋅) )被称为活性值(activations)。 一般来说,有了激活函数,就不可能再将我们的多层感知机退化成线性模型:

为了构建更通用的多层感知机, 我们可以继续堆叠这样的隐藏层, 例如 𝐇(1)=𝜎1(𝐗𝐖(1)+𝐛(1)) 和 𝐇(2)=𝜎2(𝐇(1)𝐖(2)+𝐛(2)) , 一层叠一层,从而产生更有表达能力的模型。
激活函数
ReLU函数
最受欢迎的激活函数是修正线性单元(Rectified linear unit,ReLU), 因为它实现简单,同时在各种预测任务中表现良好。 [ReLU提供了一种非常简单的非线性变换]。 给定元素 𝑥 ,ReLU函数被定义为该元素与 0 的最大值:
ReLU(𝑥)=max(𝑥,0).
通俗地说,ReLU函数通过将相应的活性值设为0,仅保留正元素并丢弃所有负元素。 为了直观感受一下,我们可以画出函数的曲线图。 正如从图中所看到,激活函数是分段线性的。
x = torch.arange(-8.0, 8.0, 0.1, requires_grad=True)
y = torch.relu(x)
d2l.plot(x.detach(), y.detach(), 'x', 'relu(x)'

最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



