知识点:
1.感知机是什么
- 接受多个输入信号,输出一个信号
- 输入信号被送往神经元时,会被分别乘以固定的权重,神经元会计算传送过来的信号的总和,只有当总和超过阈值之后,才会输出。这个过程也叫做“神经元被激活”。
- 感知机的多个输入信号都有固定的权重,权重越大,对应该权重的信号的重要性也就越大。
2.简单逻辑电路
#实现与门
def AND(x1,x2):
x=np.array([x1,x2])
w=np.array([0.5,0.5])
b=-0.7
tmp=np.sum(x*w)+b
if tmp<=0: return 0
else: return 1
#实现或门
def OR (x1,x2):
x=np.array([x1,x2])
w=np.array([0.5,0.5])
b=-0.2
tmp=np.sum(x*w)+b
if tmp<=0: return 0
else: return 1
#实现与非门001 110 011 101
def NAND(x1,x2):
x=np.array([x1,x2])
w=np.array([-0.5,-0.5])
b=0.7
tmp=np.sum(x*w)+b
if tmp<=0: return 0
else: return 1
单层感知机的局限性就在于它只能表示由一条直线分割的空间。因此单层感知机无法实现异或门。
3.单层感知机-直线-线性空间 多层感知机-叠加层-非线性空间(可以实现异或操作)
#异或操作 有一层隐藏层,即为两层感知机
def XOR(x1,x2):
s1=NAND(x1,x2)#与非门
s2=OR(x1,x2)#或门
y=AND(s1,s2)
return y
面试中遇到的问题:
问题:单层感知机无法解决异或(非线性)问题,那多层感知机(MLP)没有sigmoid激活函数的情况下能解决异或问题吗?
答:可以的。《统计学习方法》中讲感知机时一直在使用sign作为激活函数。该函数已经引入了非线性,所以理论上使用sign激活函数的MLP就可以逼近任意非线性函数。
问题:为什么要使用激活函数?
答案:如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机(Perceptron)。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。
如果使用的话,激活函数给神经元引入了非线性因素,使网络更加强大,增加它的能力,使它可以学习复杂的事物,复杂的表单数据,以及表示输入输出之间非线性的复杂的任意函数映射。
输出层可能会使用线性激活函数,但在隐含层都使用非线性激活函数。
问题:既然多层感知机用sign就能解决非线性问题,那要sigmoid函数干嘛呢?
答案:这个就可以更广泛点涉及到不同激活函数的优缺点了,如sign, sigmoid, tanh, ReLU
首先说一下激活函数需要满足的条件:1)非线性,处处可导(也可个别点不可导)
2)导数尽量简单,这样方便求解。
3)导数值域范围固定,以免梯度消失或者爆炸。
而sigmoid相比与sign效果更好,因此就用它了。但它也有缺点,因此后来有其他激活函数。
sign:
sigmoid:
tanh:
ReLU:
问题:感知机在学习权重w和偏置b的时候使用随机梯度下降(SGD),那么SGD和BP有什么区别呢?
答案:SGD指的是利用梯度下降更新权重和偏置的方法。而BP是快速计算梯度的方法。
问题:感知机是二类分类的线性分类模型,那和多分类和多标签分类有什么区别?
答案:二分类就是分类的类别有两个;多类分类是当分类的类别为多个;多标签分类时一个样本存在多个类别。
问题:感知机和SVM的区别
答案:SVM是一种二分类模型,他的基本模型是定义在特征空间上间隔最大的线性分类器,间隔最大使他有别于感知机。