最近AI编程概念火热,让我对机器学习很感兴趣,但是没有基础,打算着手实现一个基本的神经元。
一个神经元的完整实现包括:训练和推理。
训练的入参包括训练集(x和y),出参包括权重(w或视作斜率k)和偏置(b)。此外还应该有测试数据集,但此次只学习基本原理,不考虑过拟合、欠拟合或无法收敛。
推理的入参包括自变量(x)、权重和偏置,输出是因变量(y)。
根据以上信息,你可能发现了,单个神经元的数学表达式是y=w1x1+w2x2+w3x3+…wnxn+b,我们通过x和y训练确定w和b的值,再在推理时通过x、w、b确定y的值。
推理
其实推理较为简单,将x、w、b带入运算即可。但需要注意,这样得出的结果是实数范围,通常神经元的返回值会限制到0和1之间,这有助于神经元表达信息。我的理解是,比起实数乘法,0-1之间的乘法,将实数不均匀地映射为一个区间,这种做法引入了非线性。我的理解是,它使得y的区间变得向两边收敛,使结果更加倾向于0或1,尽管函数仍然连续,这种变换却带来了离散的一些性质,这有助于描述非线性关系。如果是线性函数,经过网络传播后,信息熵会变小,会无法继承之前的信息。在离散函数中,如if-else结构,能够描述逻辑关系。
未完待续。。。