自己动手写深度学习框架(感知机)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

所谓的感知机,其实本质上就是一个分类问题。假设一个事物有两个feature,那么可以根据这两个feature,来判断当前物体属于哪一个类别。判断的时候,有两种情况,一种是线性可分,一种是线性不可分。

1、or的情况

所谓的or,就是假设希望在1、0,0、1,1、1的时候,输出都是1。只有等到0、0的时候,才输出为0。这样讲起来,可能不是很直观,可以用一个图来表示,

如果是转换成python代码的形式,一般是这样的,

复制代码
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

这里的参数0.5、0.5、-0.2只是为了说明问题而存在的。实际开发过程中,比如深度学习,这些参数最终都是通过算法和大量的数据,迭代训练出来的。这里只是为了演示挑选出来的。

2、and的情况

有了or的情况,那么and也比较好理解了。那就是在0、0,1、0,0、1的时候都输出为0,只有等到1、1的时候,才输出为1。如果用上面的图形表示,就是左下方三个点属于一个类别,右上方的一个点属于一个类别。目测一下来,它也是可以找到这样一根判别线的。

3、nand的情况

nand和and是一样的,只是0、0,1、0,0、1的时候输出为1,只有等到1、1的时候,输出为0。看上出输出结果有点奇怪,但还是可以通过一根判别线进行线性可分的。

4、xor的情况

一切看上去都没有问题,也很完美。但是如果遇到异或这样的计算,问题就来了。因为,出现0、0,1、1的时候,输出为0。而只有等到0、1,1、0的时候,结果才是1。画成二维曲线的时候,就是这样的一种形式,

如果是这种情况,不管用什么直线,都是没有办法进行区分的。如果要区分的话,只能想办法构建非线性函数才能去区分。

5、怎么构建非线性函数

前面我们构建曲线的时候,都是直接在输入和输出之间,通过映射的方法去解决。其实还有一种办法,就是通过中间层的办法来解决,比如像这样,

复制代码
def XOR(x1,x2): # very important, similar to neuron network
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

对于输入的x1、x2,我们先计算s1、s2中间数据,然后再通过s1、s2去输出最终的结果。这样就可以达到我们的目的,即非线性分解,

这也就是多层网络的由来。感知机是神经网络的基础。里面的一些基本概念,比如激励函数,比如多层网络,这些和神经网络都是通用的。大家可以先理解一下感知机的概念,自己去写一些对应的python代码,这样或许印象会更加深刻一点。

相关推荐
IT智慧客07312 分钟前
Harness 到底指什么
人工智能
大模型任我行10 分钟前
阿里:端到端文档解析模型OvisOCR2
人工智能·语言模型·自然语言处理·论文笔记
aixingkong92111 分钟前
Atlas 950 1024卡SuperPoD推测分析
网络·人工智能·硬件架构·硬件工程
今心上12 分钟前
关于d2l中train_ch3以及softmax中图在pycharm中显示不出来的解决方案
深度学习·机器学习·pycharm
触底反弹13 分钟前
🤯 面试被问 AI Workflow 和 Agent 有啥区别?3 张图 + 2 段代码讲清楚!
人工智能·设计模式·面试
步步精BBJconn15 分钟前
从GPU服务器到数据中心:AI服务器高压连接器的应用与发展趋势
大数据·运维·服务器·人工智能·科技·物联网
K姐研究社21 分钟前
Codex 怎么用国产模型?Kimi + CC Switch 接入配置指南
人工智能·aigc
GuWenyue7 小时前
写Agent还要重复封装工具?一套MCP多服务方案,3个能力让AI自动查地图、读写文件、操控浏览器
人工智能·机器学习·开源
GuWenyue7 小时前
90%AI新手不会调参!LangChain双模型流水线实战,一套代码兼顾严谨+创意
人工智能
光锥智能9 小时前
WAIC亮点|兼具泛化能力与作业效率的极智嘉机器人天团
人工智能·机器人