易懂如何理解单个神经元+随机梯度下降学习逻辑与规则编程实践

这篇博客通过易懂的方式介绍了如何理解神经网络中的单个神经元,以及如何使用随机梯度下降来学习逻辑与规则。内容包括逻辑与运算的规则,神经元的数学表示,手动设置权重和偏置的实践,以及梯度下降的直观解释和编程实现。
摘要由CSDN通过智能技术生成

易懂的神经网络Python实战:单个神经元+随机梯度下降学习逻辑与规则

目录

逻辑与(AND)

破除神经元的认知障碍

实践:用程序表示一个手工设置权重weight和偏置bias的神经元

那么怎么让计算机自己确定神经元的参数?

梯度下降

1。直观理解梯度下降

2。梯度下降怎么做的?

4。梯度下降有啥用?

实践:动手实现随机梯度下降(根据上面的那个伪代码)

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,x2y的一种映射方法

我们知道输入输出,并且我们知道它是直线,那么我们就可以描述这个问题了。

我们让神经元能够学习到将(0,1)、(0,0)、(1,0)这些点分类为0,将(1,1)这个点分类为1。更直观的讲就是神经元得是像图中的这条直线一样,将四个点划分成两类。在直线左下是分类为0,直线右上分裂为1.

我们继续看这个图,在直线的右上方是x1&x2==1的情况,即分类为1的情况。在直线左下是x1&x2==0的情况。这个时候就可以用我们高中的知识来解决这个问题了。在高中我们知道一条直线可以表示为ax_1+bx_2+c=0。由于啊,在神经元里面大家喜欢把x1,x2前面的系数叫做权重(weight),把常数项叫做偏置(bias)。因此一般大家把x前面系数命名为w,把常数项命名为b。这些都是约定俗成,所以大家记忆下就好。在本文中,我用下面这个公式w1*x1+w2*x2 + b=0表示图中的那条绿色的直线。

根据高中知识,一条直线将平面划分成两半,它可以用如下方式来描述所划分的两个半平面。

  • 左下:w1*x1+w2*x2 + b<0,当x1x2至少有一个是0 的时候。
  • 右上:w1*x1+w2*x2 + b > 0​,当x1​x2​都是1 的时候。

其实w1*x1+w2*x2 + b=0​,就是神经元,一个公式而已。是不是觉得神经元的神秘感顿时消失?大家平常看到的那种图只不过是受生物启发而画的,用图来描述这个公式而已。我们画个图来表示神经元,这种画图方法是受到生物启发。而求解图中的参数则从来都是数学家早就知道的方法(最小二乘法)

然后,前面提到过,神经元的形象化是受到生物启发。所以我们先介绍下怎么启发的。

生物意义上的神经元,有突触(输入),有轴突(输出),有细胞核(处理)。并且神经元传输的时候信号只有两个正离子和负离子。这和计算机1和0很类似。

总结下,神经元有突触(输入),有轴突(输出),有细胞核(处理)。开工画图:

咱们把上面这个神经元的数学表达式写一下对比下,w1*x1+w2*x2 + b=0.以后啊,大家见到神经元就用这种方式理解就可以。大家不要对神经网络过于迷信化和模糊化,它不是玄学。神经元不是玄学,不是艺术(我只是那种感性经验思维),它是数学和生物启发结合的产物。

好现在我们知道神经元的数学表达和怎么画它的形象化的图了。那么不如我们用编程也表达下它吧?

实践:用程序表示一个手工设置权重weight和偏置bias的神经元

去掉注释就10行左右的代码,好现在自己动手实践下吧?计算机思维:动手写代码进行实践是进步的唯一方法

# -*- coding: utf-8 -*-
"""
让神经元学习到逻辑与这个规则
@author: 李韬_varyshare

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值