感知机(perceptron)是具有输入和输出的算法。给定一个输入以后,将输出一个既定的值。
类似于用编程实现数字逻辑中的电路。
感知机将权重和偏置设定为参数。感知机会计算输入信号和权重的乘积,然后加上偏置,如果这个值大于0则输出1,否则输出0。
b+w1x1+w2x2
可以看作一位数组做得矩阵乘积[x1,x2]*[w1,w2]+b
权重ω是控制输入信号的重要性的参数,偏置b是调整神经元被激活的容易程度(输出信号为1的程度)的参数。【阈值θ=-b】
单层感知机只能表示线性空间。(局限性:只能表示由一条直线分割的空间)
'''
感知机
'''
import numpy as np
# 与门
def AND(x1, x2):
x = np.array([x1, x2]) # 输入信号
w = np.array([0.5, 0.5]) # 自定义权重参数
b = -0.9 # 自定义偏置
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1
# 与非门
def NAND(x1, x2):
x = np.array([x1, x2])
w = np.array([-0.5, -0.5])
b = 0.9
tmp = np.sum(w*x) +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(w*x) +b
if tmp <= 0:
return 0
else:
return 1
print('\nAND')
for x1 in range(2):
for x2 in range(2):
print('{0:4d} {1:4d} {2:4d}'.format(x1, x2, AND(x1, x2)))
print('\nNAND')
for x1 in range(2):
for x2 in range(2):
print('{0:4d} {1:4d} {2:4d}'.format(x1, x2, NAND(x1, x2)))
print('\nOR')
for x1 in range(2):
for x2 in range(2):
print('{0:4d} {1:4d} {2:4d}'.format(x1, x2, OR(x1, x2)))
叠加了多层的感知机也称为多层感知机。
多层感知机可以表示非线性空间,理论上可以表示计算机(按照某种既定的放方法进行处理)。
就是组合逻辑电路。
# 异或门
def XOR(X1, X2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(X1, X2)
return y
print('\nXOR')
for x1 in range(2):
for x2 in range(2):
print('{0:4d} {1:4d} {2:4d}'.format(x1, x2, XOR(x1, x2)))
感知机收敛定理:通过有限次数的学习,线性可分问题是可解的。非线性问题不能通过自动学习来解决。
机器学习 | 深度学习 |
---|---|
人为设计从图像转换为向量时使用的特征量;在用机器学习技术学习这些特征量的模式 | 不存在人为介入,全部都由机器来学习 |
对于不同的问题,必须使用适合的特征量 | (端到端机器学习)与处理无关,从输入的原始数据中获得输出的目标结果。 |
特征量指可以从输入数据中准确地提取本质数据的转换器。
机器学习中,将数据分为训练数据/监督数据和测试数据两部分来进行学习和实验。
首先使用训练数据进行学习,寻找最优的参数;然后,使用测试数据评价训练得到的模型的实际能力。
获得泛化能力是机器学习的最终目标。同时要避免过拟合问题。
泛化能力指处理未被观察过的数据的能力。
过拟合指只可以顺利处理某个数据集,但是无法处理其他数据集的情况。