自己动手写chatGPT:神经网络的神经元和损失函数

chatGPT基于所谓的大模型,这里有两个关键词一个是“大”,一个是“模型”,我们先看什么叫“模型”。所谓模型其实就是深度学习中的神经网络,后者由很多个称之为“神经元”基本单元组成。神经元是一种基础计算单元,它执行两种操作,首先是一个矩阵M和输入向量X做乘法操作,其结果是一维向量WX,然后再跟另一个一维向量b做加法操作,所得结果还是一维向量WX + b,这些步骤统称为线性运算,最后这个一维向量会输入到一个函数f,最终输出结果是也是一个向量f(W*X + b),这个步骤叫非线性操作,其基本流程如下:
请添加图片描述
chatGPT的参数有1750亿个,也就是说它由1750亿个像上面那样的计算单元相互连接所形成的超大网络组成。上面流程中有一个关键步骤那就是函数f的执行,它也叫激活函数,其目的是把把前面线性运算的结果做某种非线性的跃迁,它主要有四种类型,第一种叫sigmoid,它的表达式为1 / (1 + e^(-x)),我们看看其函数图形:

import torch
import matplotlib.pyplot as plt#创建x插值点[-5.0, -4.9, -4.8,...., 5.0]
x = torch.range(-5., 5., 0.1)
print(f"x:{x}")
#执行激活函数
y = torch.sigmoid(x)
print(f"y:{y}")
#根据插值绘图
plt.plot(x.numpy(), y.numpy())

上面代码执行后输出图形如下:
在这里插入图片描述
它的输出结果在0到1之间,如果我们想让网络预测某种概率,那么我们就可以在网络的末尾使用这个函数,它存在一个问题,那就是在x接近1.0或0的地方,如果对这些位置的x求导的话,切线的斜率就会非常接近0,这在训练网络时会产生一种叫"vanishing gradient"的问题。

第二种激活函数叫tanh(x), 它的表达式为(e^(x)- e ^ (-x)) / (e ^ (x) + e ^ (-x)),我们用下面代码画出其函数图形:

import torch 
import matplotlib.pyplot as plt
x = torch.range(-5., 5., 0.1)
y = torch.tanh(x) 
plt.plot(x.numpy(), y.numpy()) 
plt.show()

上面代码运行后结果如下:
在这里插入图片描述
第三种叫ReLU,它是最重要也是应用最多的一种激活函数,它的解析式为f(x)= max(0,x),它看起来简单,但在实用中却相当有效,我们看看它的图形:

import torch
import matplotlib.pyplot as pltrelu = torch.nn.ReLU()
x = torch.range(-5., 5., 0.1)
y = relu(x)plt.plot(x.numpy(), y.numpy())
plt.show()

上面代码运行后结果如下:
在这里插入图片描述
它的逻辑很简单,就是把所有小于0的值转换为0,大于0的保持不变。它有个问题就是在小于0的区域,它的图像是一条直线,这意味着在这个区域对其求导所得结果都是0,这对网络的训练会带来不利影响,因此它有一个变体叫leaky ReLU, 函数为f(x)=max(x, ax),其中参数a需要通过网络的训练来得出,我们看看其函数图形:

import torch 
import matplotlib.pyplot as plt
prelu = torch.nn.PReLU(num_parameters=1) 
x = torch.range(-5., 5., 0.1)
y = prelu(x)
plt.plot(x.numpy(), y.detach().numpy()) 
plt.show()

在这里插入图片描述
最后一个常用的激活函数叫softmax,它的作用是在给定的若干个选项中计算每个选项的百分比,例如我们判断一张图片里的动物是猫还是狗,那么这个函数就会给出两个结果分别对应是还是狗的概率。这个函数的表达式为: softmax(xi) = (e ^xi) / ( e ^ x1 + e ^ x2 + … + e ^xk),我们看看该函数的相关代码:

import torch.nn as nn 
import torch softmax = nn.Softmax(dim = 1)
x_input = torch.randn(1,3)
#y_output对应向量中所有分量加总为1
y_output = softmax(x_input)
describeTensor(x_input)
describeTensor(y_output)
#把输出结果的分量加总
print(torch.sum(y_output, dim=1))

上面代码执行后结果如下:

Type: torch.FloatTensor
shape/size: torch.Size([1, 3])
values: tensor([[ 0.7110,  0.0178, -0.8281]])
Type: torch.FloatTensor
shape/size: torch.Size([1, 3])
values: tensor([[0.5832, 0.2916, 0.1251]])
tensor([1.])

在深度学习中还有一个重要概念就是损失函数。它其实是一种数学的方式来描述结果的好坏。假设我们有一个网络用来识别输入图片是猫还是狗,网络输出两个数值,一个数值对应是狗的概率,另一个数值对应是猫的概率。如果网络识别能力足够强,那么输入一张狗的图片时,对应狗的概率数值要尽可能大,对应猫的数值要尽可能小,损失函数就是要用数学函数的方式来描述“对应狗的概率数值要尽可能大,对应猫的数值要尽可能小”这种情况。

在“有监督学习”的情况下,网络在训练时输入数据会有对应的答案,例如我们训练网络识别猫狗图片时,每张图片还会对应有一个标记值,如果是狗图片,那么标记1.0,如果是猫图片,那么标记0,我们用y来表示这个标记值,用y^表示网络给出图片是猫还是狗的概率,我们可以用多种公式来描述网络输出的准确度,第一种叫平方和平均(MSE),其公式如下:
请添加图片描述
pytorch框架提供了这个函数,我们可以直接调用,代码如下:

import torch
import torch.nn as nn 
mse_loss = nn.MSELoss()
outputs = torch.Tensor([1,2])
targets = torch.Tensor([3,4])
#[(3-1)^2 + (4-2)^2] / 2
loss = mse_loss(outputs, targets)
print(loss)

上面代码输出结果为4.0,

第二种损失函数叫交叉熵,其公式为:
请添加图片描述
这个公式常用于判断输入属于哪种类别,它的使用要基于前面描述的softmax函数。假设网络要判断的输入图片中物品的种类有四种,分别为猫,狗,牛,羊,我们用one-hot-vector来表示这五种不同类型,如果是猫,对应向量就是[1,0,0,],如果是狗,那么就是[0,1,0,0,],以此类推。

当我们把一张猫图片输入网络,网络使用softmax计算五种物体的可能性,例如输出为[0.775, 0.116, 0.039,0.070],那么对应到上面公式,i的取值就是0到4,y0=1,y1=0,y2=0,y3=0, y ^ 0 = 0.775, y ^ 1 = 0.116, y ^ 2 = 0.039, y ^ 4 = 0.070,当我们调整网络内部参数,让它输出的结果代入上面公式后所得结果尽可能小,这种调节的结果就使得网络在接收猫图片后,它输出的第0个分量对应的数值要尽可能的大。

我们看看如何使用pytorch调用上面的损失函数:

import torch
import torch.nn as nnce_loss = nn.CrossEntropyLoss()outputs = torch.randn(3,5)
print(outputs)
'''
outputs对应向量会在CrossEntropyLoss中进行softmax运算,将其分量正规化
1对应向量[0, 1, 0, 0, 0]
0对应向量[1, 0, 0, 0, 0]
4对应向量[0, 0, 0, 0, 1]
分别用上面向量跟outputs中对应向量进行cross entropy 计算,最终把三个计算结果加总求平均后输出
'''
targets = torch.tensor([1, 0, 4], dtype = torch.int64)
loss = ce_loss(outputs, targets)
print(loss)

上面代码运行后输出一个数值,由于outputs是随机初始化的向量,因此每次运行输出结果都有不同。

最后还有一种损失函数是上面的变种叫二进制交叉熵损失,它主要把类别现在在两种以内,因此targets中的元素值不超过1 ,同时outputs中元素的值要在0和1之间,我们看看代码:

bce_loss = nn.BCELoss()
sigmoid = nn.Sigmoid()
probabilities = sigmoid(torch.randn(4,1)) #把分量取值在0,1之间
#view(4,1)把一个包含4个分量的一维向量转换成一个包含4个一维向量的2维数组,每个向量只包含一个元素
targets = torch.tensor([1, 0, 1, 0], dtype=torch.float32).view(4,1)
loss = bce_loss(probabilities, targets)
print(probabilities)
print(loss)

上面代码运行后输出为:

tensor([[0.6935],[0.8990],[0.6251],[0.3131]])
tensor(0.8760)

更多内容请在b站搜索Coding迪斯尼。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/13172.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YYC松鼠聚合直播系统源码 融和电商商城、网红热点、娱乐竞技直播等

正文: 松鼠聚合直播系统是一套团队自主研发、源码开源,可自由二次开发的直播系统。系统融和电商商城、网红热点、娱乐竞技直播等,能够快速实现吸粉引流,集合在线直播、互动分享、社交传播等一体化功能,实现“直播”的…

ChatGPT人工智能商业高效实操指南

帮助看见未来的人更快成功 现在,ChatGPT 的时代来了,越来越多的案例佐证,它正在取代人力,并且投入产出 比高到让人无法想象!轻松为企业主省出几十万! 那么人工智能在在商业里面到底扮演了多少个角色呢? 接下来我会告诉你们 1、承担客服工作,客户满意度大大提高 客服无疑是…

ChatGPT已能模仿任何写作风格,让你的自媒体快速起号

我认识的一两个技术大佬目前失业在家,压力不小。对于现在的就业市场来说,再找工作,高不成低不就。他们的薪资,一般企业无法承受,大厂岗位又在缩减。今年真正感受到了寒冬。 对于我们还有饭吃的程序员,现在不…

或许能用 ChatGPT 插件实现财富自由

文章目录 或许能用 ChatGPT 插件实现财富自由1. 认识一下1.1 是什么1.2 怎么用 2. 举个例2.1 Wolfram2.2 Browsing 3. 怎么做到的4. 财富自由4.1 生活类插件4.2 品牌推广类 5. 限制 或许能用 ChatGPT 插件实现财富自由 我们知道,当前 ChatGPT 最大的局限性就是模型…

chatGPT能做职业规划?看完之后发现3年软测白做了

“每天都是重复、单调的工作,收入不理想,想跳槽无力,学习又没有动力和方向,不知道未来的发展在哪里,甚至想转行” 做测试久了,很多人都有诸如此类的疑惑,不想一直停留在测试需求分析&#xff0…

剑指chatGPT,马斯克:你们暂停一下,我追赶追赶

前言 近期,马斯克被曝出购买了大约1万个GPU,并从DeepMind处招募到AI人才,打算开发自己的大语言模型(LLM)项目。 啥是GPU,就是图形处理器。一般用于构建大型语言模型所需。 GPU价格不菲,以英伟…

ChatGPT早报新闻5.6

2023.5.6早报 1.苹果的ChatGPT哪去了?库克的回应很谨慎 凤凰网科技讯北京时间5月5日消息,面对ChatGPT和其他聊天机器人的爆红,苹果公司CEO蒂姆库克表达了谨慎的看法。 库克在第二财季财报电话会议上称,人工智能(AI)的潜力“…

突发!李开复成立公司亲自下场抢人!宣布新公司目标不只是中文ChatGPT,资金算力已到位......

点击“开发者技术前线”,选择“星标” 让一部分开发者看到未来 来自AI前线 继王慧文、王兴之后,又一大佬宣布进军 AI 大模型赛道。 李开复宣布筹办新 AI 公司, 剑指 AI 2.0 3 月 19 日,创新工场董事长兼 CEO 李开复发朋友圈宣布成…

畅谈ChatGPT将在教育领域所引发的变化,深刻思考教育该如何转变和应对

最近最火的,非ChatGPT莫属。 ChatGPT,简单来说就是一台“地表最强聊天机器人”,智商高达147。和它聊天时,它能精准判断你的用意,给出你期待的答案,因为它具备一定的逻辑和常识。用过它的人都惊叹它拥有堪比…

王佑镁等|“阿拉丁神灯”还是“潘多拉魔盒”:ChatGPT教育应用的潜能与风险...

点击上方蓝色文字关注我们 作者简介:王佑镁,博士,教授,博士生导师,温州大学大数据与智慧教育研究中心主任(浙江温州 325035);王旦、梁炜怡,硕士研究生,温州大…

ChatGPT引发的对教育的思考

就最近特别火的那个PT,特别值得所有的家长,所有的中年人应该去关注,大概三周前我玩了一下这个PT,我觉得这确实是一个颠覆性的技术,就是说人工智能,或者我们说AI的算法,它已经能做到这个程度&…

ChatGPT专题|为什么ChatGPT这么强?—— 一文读懂ChatGPT原理!

前言 最近一周多的时间,只要不是生活在火星,喜欢技术的同学一定都被OpenAI的ChatGPT给刷屏了。ChatGPT与以往的公开提供服务的对话机器人相比,性能有了显著的提高。它可以相对可靠地提供一些日常对话、知识获取的功能,也可以它根据…

【图像加密】基于matlab GUI正交拉丁方+二维Arnold置乱图像加密【含Matlab源码 813期】

⛄一、正交拉丁方置乱及二维Arnold置乱简介 0 引言 随着通讯技术的飞速发展, 越来越多的领域需要传送数字图像信号, 因此信息的传送安全问题显得越来越重要。通常应用于数字图像通信的两种保护技术为:数字水印技术和图像加密技术。前一种保护技术因不改变图像的可见性而不适合…

ChatGPT自己会选模型了!微软亚研院+浙大爆火新论文,HuggingGPT项目已开源

©作者 | 桃子 Britta 来源 | 新智元 「贾维斯」已来!微软亚研院和浙大推出了一个大模型协作系统HuggingGPT,让ChatGPT协调HF社区模型,处理各种多模态任务能力超强。 ChatGPT引爆的AI热潮也「烧到了」金融圈。 近来,彭博社的研…

华人一作DragGAN爆火!拖动你的GAN:交互式图像编辑新高度

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 点击进入—>【GAN和扩散模型】微信技术交流群 转载自:机器之心 | 编辑:蛋酱、小舟 如果甲方想把大象 P 转身,你只需要拖动 GAN 就好了。 在图像生成领…

魔戒啊魔戒,请帮我解开CDM的“数据魔法”

关注我们牛年牛气冲天 4月16日,被誉为魔幻电影鼻祖的《指环王》三部曲,将陆续以4K版登上国内IMAX银幕。那令人震撼而又陶醉的魔幻世界重新归来了。 在现实世界中,在看似枯燥乏味的数据中,是否也存在魔法呢?下面&#x…

医疗ChatGPT、金融GPT都来啦!“潘多拉的魔盒”已经打开?

源|学术头条 AIGC(AI Generated Content)即人工智能生成内容。近期爆火的 AI 聊天机器人 ChatGPT,以及 DallE 2、Stable Diffusion 等文生图模型,都属于 AIGC 的典型案例,它们通过借鉴现有的、人类创造的内…

强强联合!谷歌大模型团队并入DeepMind!誓要赶上ChatGPT进度

文|明敏 发自 凹非寺源|量子位 为应对ChatGPT,谷歌在大模型方面的动作还在继续。 最新消息,其旗下专注语言大模型领域的“蓝移团队” (Blueshift Team)宣布,正式加入DeepMind,旨在共…

史上最完整的《指环王》魔戒战争大事记(编年体长文)

以下内容转载自 https://www.toutiao.com/i6872919198092231179/ 原创跃马酒馆小招待2020-09-16 13:33:12 大家好,本文承接上一篇文章对《指环王》历史的梳理,这次从更加激动人心的第二纪元开始将整个魔戒故事以编年体的方式进行叙述。 (如…

GEMMA 全基因组关联分析+CMplot多性状曼哈顿+QQ图脚本

这里写自定义目录标题 GEMMA 全基因组关联分析CMplot多性状曼哈顿QQ图脚本 GEMMA 全基因组关联分析CMplot多性状曼哈顿QQ图脚本 ###GEMMA 全基因组关联分析CMplot多性状曼哈顿QQ图脚本 #作者:刘济铭 ########################## GWAS理论和基本结果理解已经有很多…