易懂的神经网络Python实战:单个神经元+随机梯度下降学习逻辑与规则
目录
实践:用程序表示一个手工设置权重weight和偏置bias的神经元
AI韬鸽的笔记专栏中《零神经网络实战》系列持续更新介绍神经元怎么工作,最后使用python从0到1不调用神经网络框架(不使用tensorflow等框架)来实现神经网络。从0基础角度进行神经网络实战。
下一篇: Ai酱:零基础神经网络实战(2):理解并实现反向传播及验证神经网络是否正确
点赞: https://blog.csdn.net/varyshare/phoenix/article/digg?ArticleId=89556131
目录为:
逻辑与、破除神经元认知障碍、手工调神经元、让计算机自己学习参数、随机梯度下降实践
作者:知乎 @Ai酱
逻辑与(AND)
我们先不管什么是神经元,咱们先介绍下逻辑与(AND)是什么。在计算机中,存储的是0和1。计算机有很多对这种01操作的运算,其中有一种运算叫做逻辑与,在编程中运算符通常表示为&
。两个数进行逻辑与运算的规则就是只要有一个数是0,那么整个运算就是0。还是不太懂?我们举个例子。
1&0 == 0
0&1 == 0
0&0 == 0
1&1 == 1
然后我们要解决的问题是,怎么让神经元根据这四组数据自己学习到这种规则。接下来我们整理下这四个数据。然后我们将x1&x2==y
的四种情况可以表示为如下所示。我们需要做的是让一个神经元根据这四个数据学习到逻辑与的规则。
x1 x2 y
1 0 0
0 1 0
0 0 0
1 1 1
也就是说,将(x1,x2)视作一个坐标,将它描点在二维平面是这样的。
我们让神经元能够学习到将(0,1)、(0,0)、(1,0)这些点分类为0,将(1,1)这个点分类为1。更直观的讲就是神经元得是像图中的这条直线一样,将四个点划分成两类。在直线左下是分类为0,直线右上分裂为1.
破除神经元的认知障碍
在人工智能范畴的的神经元它本质是一条直线,这条直线将数据划分为两类。与生物意义上的神经元可谓是千差万别。你可以理解为它是受到生物意义上的神经元启发,然后将它用来形象化数学公式。
既然神经元它在数学意义上就是一条直线那么,怎么表示呢?
学计算机一个很重要的思维就是:任何一个系统都是由输入、输出、和处理组成。
我们在了解神经元也是一样,在本文中的需求是知道一个坐标(x1,x2)
,输出这个坐标的分类y。
我们按照计算机的输入输出思维整理下思路:
输入:x1,x2
输出:y
处理:自己学习到从x1,x2
到y
的一种映射方法
我们知道输入输出,并且我们知道它是直线,那么我们就可以描述这个问题了。
我们让神经元能够学习到将(0,1)、(0,0)、(1,0)这些点分类为0,将(1,1)这个点分类为1。更直观的讲就是神经元得是像图中的这条直线一样,将四个点划分成两类。在直线左下是分类为0,直线右上分裂为1.
我们继续看这个图,在直线的右上方是x1&x2==1
的情况,即分类为1的情况。在直线左下是x1&x2==0
的情况。这个时候就可以用我们高中的知识来解决这个问题了。在高中我们知道一条直线可以表示为。由于啊,在神经元里面大家喜欢把前面的系数叫做权重(weight),把常数项叫做偏置(bias)。因此一般大家把前面系数命名为,把常数项命名为。这些都是约定俗成,所以大家记忆下就好。在本文中,我用下面这个公式表示图中的那条绿色的直线。
根据高中知识,一条直线将平面划分成两半,它可以用如下方式来描述所划分的两个半平面。
- 左下:,当和至少有一个是0 的时候。
- 右上:,当和都是1 的时候。
其实,就是神经元,一个公式而已。是不是觉得神经元的神秘感顿时消失?大家平常看到的那种图只不过是受生物启发而画的,用图来描述这个公式而已。我们画个图来表示神经元,这种画图方法是受到生物启发。而求解图中的参数则从来都是数学家早就知道的方法(最小二乘法)。
然后,前面提到过,神经元的形象化是受到生物启发。所以我们先介绍下怎么启发的。
生物意义上的神经元,有突触(输入),有轴突(输出),有细胞核(处理)。并且神经元传输的时候信号只有两个正离子和负离子。这和计算机1和0很类似。
总结下,神经元有突触(输入),有轴突(输出),有细胞核(处理)
。开工画图:
咱们把上面这个神经元的数学表达式写一下对比下,.以后啊,大家见到神经元就用这种方式理解就可以。大家不要对神经网络过于迷信化和模糊化,它不是玄学。神经元不是玄学,不是艺术(我只是那种感性经验思维),它是数学和生物启发结合的产物。
好现在我们知道神经元的数学表达和怎么画它的形象化的图了。那么不如我们用编程也表达下它吧?
实践:用程序表示一个手工设置权重weight和偏置bias的神经元
去掉注释就10行左右的代码,好现在自己动手实践下吧?计算机思维:动手写代码进行实践是进步的唯一方法
# -*- coding: utf-8 -*-
"""
让神经元学习到逻辑与这个规则
@author: 李韬_varyshare