感知机作为深度学习的基础,原理应该说是很简单的。相关讲解推荐北大小天才的 https://www.pkudodo.com/2018/11/18/1-4/
关于感知机没有太多面试需要问的,网上面经也少有相关问题。但我最后决定写一下是有一些细节问题值得思考。
1、单层感知机无法解决异或(非线性)问题,那多层感知机(MLP)没有sigmoid激活函数的情况下能解决异或问题吗?
可以的。
《统计学习方法》中讲感知机时一直在使用sign作为激活函数。该函数已经引入了非线性,所以理论上使用sign激活函数的MLP就可以逼近任意非线性函数。让我们抄一下这篇博文的例子,来看使用sign激活函数的多层感知机解决异或问题。
import numpy as np
def yufei(x1,x2):
"""与非门的实现"""
x=np.array([x1,x2])
w=np.array([-0.5,-0.5])
b=0.7
value=np.sum(w*x)+b
if value<=0:
return 0
else:
return 1
def huo(x1,x2):
"""或门的实现,只有参数不一样"""
x=np.array([x1,x2])
w=np.array([0.5,0.5])
b=-0.2
value=np.sum(w*x)+b
if value<=0:
return 0
else:
return 1
def yu(x1,x2):
"""与门的实现,只有参数不一样"""
x=np.array([x1,x2])
w=np.array([0.5,0.5])
b=-0.7
value=np.sum(w*x)+b
if value<=0:
return 0
else:
return 1
def yihuo(x1,x2):
"""异或门的实现"""
s1=yufei(x1,x2)
s2=huo(x1,x2)
y=yu(s1,s2)
return y
yihuo(0,0) #输出0
yihuo(1,0) #输出1
yihuo(0,1) #输出1
yihuo(1,1) #输出0
2、问题来了,既然多层感知机用sign就能解决非线性问题,那要sigmoid函数干嘛呢?
这个就可以更广泛点涉及到不同激活函数的优缺点了,如sign, sigmoid, tanh, ReLU ....
首先说一下激活函数需要满足的条件:1)非线性,处处可导(也可个别点不可导)
2)导数尽量简单,这样方便求解。
3)导数值域范围固定,以免梯度消失或者爆炸。
而sigmoid相比与sign效果更好,因此就用它了。但它也有缺点,因此后来有其他激活函数。
3、感知机在学习权重w和偏置b的时候使用随机梯度下降(SGD),那SGD和BP有什么区别呢?
在《Neural Network and Deep Learning》中写过
我们看到了神经⽹络如何使⽤梯度下降算法来学习他们⾃⾝的权重和偏置。但是,这⾥还留下了⼀个问题:
我们并没有讨论如何计算代价函数的梯度。这是很⼤的缺失!在本章,我们会解释计算这些梯度的快速算法,
也就是反向传播(backpropagation)。
所以按这个逻辑来说。SGD指的是利用梯度下降更新权重和偏置的方法。而BP是快速计算梯度的方法。
所以BP之前还有其他求梯度方法吗?答案是有的,如正向直接求导。这在一两层网络中完全是可行的。如本章中的感知机就是直接对loss求导。但当网络层数变多时,就到了BP的用武之地。这部分的深入理解可以推荐这篇翻译文章。
4、感知机是二类分类的线性分类模型,那和多分类和多标签分类有什么区别?
《统计学习方法》中关于相关概念有如下定义:
分类问题:在监督学习中,当输出变量Y取有限个离散值时,预测问题变成为分类问题。
二类分类:当分类的类别为两个(0/1; 是/否; -1/+1)时,为二类分类问题。因此私以为并没有所谓的单分类问题。
eg:一个包含苹果的图片,将其分为是/否包含苹果
多类分类:当分类的类别为多个时,为多类分类问题。
eg:一个水果的图片,将其分为苹果、香蕉、桃子
多标签分类:一个样本存在多个类别,如(自己写的)
eg: 一堆水果的照片,区分其中有哪些水果
这个小问题在仔细研究交叉熵是会有用到,因此此处根据个人看法分析一下。
5、感知机和SVM区别
《统计学习方法》中关于SVM定义有这样一句话:SVM是种二类分类模型。它的基本模型是定义在特征空间上间隔最大的线性分类器,间隔最大使他有别于感知机。
良心博主推送福利: 《Neural Network and Deep Learning》中文版免费下载
这本书受欢迎程度是公认的,看上面👆链接的评论就知道了。有用的话点个赞吧~