神经元是一种分类器,单个神经元只能进行线性分类,多个神经元组成网络增强到可以进行非线性分类。
神经元通过大量数据的训练,会掌握那些数据中隐藏的普遍规律。这些规律通过反复调整到最佳值的权重被神经元记忆下来。
给这个训练好的神经元输入一个同类型的数据,它可以根据掌握的基本规律进行正确的分类。
我们拿苹果和香蕉的分类来举例说明:(为了叙述的方便,我们最简化这个问题)
假设我们只通过颜色和形状来区分苹果和香蕉。苹果是圆的,红色的。香蕉是弯的,黄色的。我们把这个设定用表格转化成数字形式
我们先定义输入值用p表示,输入权重用w表示,为了模拟神经元本身的信号,引入自身强度权重b。
根据我们的例子,一次有两个输入值:颜色p1,形状p2。对应的权重就是w1和w2。权重的初始值可以任意设定,它们最终会被自动调整到合适的值。
我们随意取以下初始值:w1 = 3,w2 = -5,b = 1
现在开始训练,我们进行有监督训练。意思就是训练数据里包括正确答案,这样可以计算误差。输入一个苹果(颜色:-1,形状:-1,正确答案:0)
第一步:加权求和。(p1 * w1 + p2 * w2 +......pn * wn) + b
我们的例子代入公式(-1 * 3 + -1 * -5) + 1 = -3 + 5 + 1 = 3
得到求和结果后,我们要把这个结果转化成便于我们利用的形式。通过一种专门的函数(传递函数)进行转换。传递函数有很多种,每种的用途不同,根据我们例子里要分辨苹果0和香蕉1,需要输出的值要么是0,要么是1。我们选择Step传递函数。
Step传递函数的计算方法是:如果大于0,输出1,否则输出0。非常对我们的口味。
把结果用Step进行转化,Step(3) = 1,正确答案是0,错了。说明那些权重值不对,要调整。
要调整权重值,我们先要知道误差是多少。误差e = 正确答案 - 实际输出。代入公式计算e = 0 -1 = -1
新的权重值 = 旧的权重值 + 误差 * 输入值
新的自身权重 = 旧的自身权重 + 误差
代入公式计算:
w1(new) = w1(old) + e * p1 = 3 + -1 * -1 = 4
w2(new) = w2(old) + e * p2 = -5 + -1 * -1 = -4
b(new) = b(old) + e = 1 + (-1) = 0
得到新的权重值后,我们进行新一轮的训练。再次输入一个苹果(颜色:-1,形状:-1,正确答案:0)
加权求和s = -1 * 4 + -1 * -4 + 0 = 0
输出值a = Step(0) = 0
误差e = 0 - 0 = 0
正确了。
我们再输入一个香蕉试试(颜色:1,形状:1,正确答案:1)
加权求和s = 1 * 4 + 1 * -4 + 0 = 0
输出值a = Step(0) = 0
误差e = 1 - 0 = 1
又错了,我们再次启动权重调整
w1(new) = w1(old) + e * p1 = 4 + 1 * 1 = 5
w2(new) = w2(old) + e * p2 = -4 + 1 * 1 = -3
b(new) = b(old) + e = 0 + 1 = 1
再输入一个香蕉试试(颜色:1,形状:1,正确答案:1)
加权求和s = 1 * 5 + 1 * -3 + 1 = 3
输出值a = Step(3) = 1
误差e = 1 - 1 = 0
正确了。
现在神经元已经学会了如何分辨苹果和香蕉。我们输入一个苹果数据验证一下
输入:(颜色:-1,形状:-1,正确答案:0)
加权求和s = -1 * 5 + -1 * -3 + 1 = -1
输出值a = Step(-1) = 0
误差e = 0 - 0 = 0
正确!!!