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

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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代码,这样或许印象会更加深刻一点。

相关推荐
美酒没故事°21 小时前
Open WebUI安装指南。搭建自己的自托管 AI 平台
人工智能·windows·ai
云烟成雨TD21 小时前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
简简单单做算法21 小时前
基于GA遗传优化的Transformer-LSTM网络模型的时间序列预测算法matlab性能仿真
深度学习·matlab·lstm·transformer·时间序列预测·ga遗传优化·电池剩余寿命预测
AI攻城狮21 小时前
用 Obsidian CLI + LLM 构建本地 RAG:让你的笔记真正「活」起来
人工智能·云原生·aigc
鸿乃江边鸟21 小时前
Nanobot 从onboard启动命令来看个人助理Agent的实现
人工智能·ai
lpfasd12321 小时前
基于Cloudflare生态的应用部署与开发全解
人工智能·agent·cloudflare
俞凡21 小时前
DevOps 2.0:智能体如何接管故障修复和基础设施维护
人工智能
comedate21 小时前
[OpenClaw] GLM 5 关于电影 - 人工智能 - 的思考
人工智能·电影评价
财迅通Ai21 小时前
6000万吨产能承压 卫星化学迎来战略窗口期
大数据·人工智能·物联网·卫星化学
liliangcsdn21 小时前
Agent Memory智能体记忆系统的示例分析
数据库·人工智能·全文检索