人工智能(一)架构

一、引言

    人工智能这个词不是很新鲜,早就有开始研究的,各种推荐系统、智能客服都是有一定的智能服务的,但是一直都没有体现出多高的智能性,很多时候更像是‘人工智障’。

    但是自从chatGpt3被大范围的营销和使用之后,人工智能逐渐体现出来他的智能性和高度的推理分析能力,虽然还是比不上有经验的业界选手,但是完全可以指导刚刚入行的业界菜鸟。

    他的范围也不再局限于软件行业,财务、法律、人事等等各种各样的行业都开始进行学习使用。但是大家对于他的实现原理和架构还是没有了解,只是听各种特征过程、神经网络、token、大模型之类的专业术语就感觉好像是两个世界的知识一样,其实只是因为AI已经被研究了很久,积累的底层比较多。

    作者经过一段时间的研究学习,对于AI也有了自己的一些理解,在这里进行分享,希望读者可以解开心中的疑惑,并且做好未来AI的学习应对。

二、架构

    人工智能的使用场景很多,对话、机器人、文本分析、视频图像处理等等。一方面既然是因为chatGpt,人工智能这个词又被炒热了,另外一方面对话分析又非常具有人工智能代表性,毕竟授人以鱼不如授人以渔,对话传递知识明显是更加智能的体现。作者就以对话模型作为分析的场景。

    在作者看来他的架构是这样的:

图片

1、神经网络

    神经网络是一种受人脑结构和功能启发的计算模型,它试图模拟生物神经系统的信息处理方式。基本的神经网络由大量的节点(或称为“神经元”)组成,这些节点通常被组织成多层。每个节点接收来自前一层节点的输入,对这些输入进行加权求和,然后通过一个非线性激活函数生成输出,该输出随后传递给下一层节点。

图片

2、深度学习框架

    深度学习框架是一种软件库或工具,它提供了构建、训练和部署深度学习模型所需的模块和接口。这些框架通常包含了预定义的多种神经网络层、优化算法、损失函数以及其他有助于简化深度学习模型开发的工具。代表性的有TensorFlow、PyTorch

图片

3、Transformer模型

    Transformer模型是一种基于自注意力机制的深度学习模型,Transformer模型在自然语言处理(NLP)领域取得了革命性的进展,尤其是在机器翻译、文本摘要、问答系统和文本生成等任务中表现出色。

  • Encoder (左侧): 编码器接收输入并构建其表示(其特征)。这意味着对模型进行了优化,以从输入中获得理解。

  • Decoder (右侧): 解码器使用编码器的表示(特征)以及其他输入来生成目标序列。这意味着该模型已针对生成输出进行了优化。

图片

4、数据集

    通常是从互联网上收集的大规模文本数据,包括书籍、文章、网页、新闻、论坛帖子、社交媒体内容等,经过清洗和预处理,更适合于模型训练,比如:

评论,情感"这部电影的剧情紧凑,特效震撼,非常推荐!",正面"演员的表演非常自然,导演把握得很好,值得一看。",正面"电影节奏太慢,情节也比较散乱,不太喜欢。",负面"虽然期待已久,但看完之后感觉很失望,剧情缺乏新意。",负面"音乐和摄影都很出色,给人留下深刻印象。",正面"特效做得很糟糕,完全破坏了观影体验。",负面

5、标记器Tokenizer


    将文本数据转换为模型能够理解的格式,就像计算机只会理解0、1一样,模型识别数据也只能识别数字,那就需要将数据集转换成模型认识的数字,他分为以下几步:

图片

分词(Tokenization):将文本字符串分割成更小的单元,这些单元可以是单词、子词(subwords)、字符等。例如,句子 "Hello, world!" 可能被分割成 ["Hello", ",", "world", "!"]。
编码(Encoding):将分词后的单元转换为数值ID,这些ID对应于模型的词汇表中的索引。例如,"Hello" 可能被转换为词汇表中的ID 1234。
添加特殊标记(Special Tokens):为了满足特定模型的要求,可能需要在序列的开始、结束或其他位置添加特殊标记,如 [CLS]、[SEP]、[PAD] 等。
截断和填充(Truncation and Padding):将序列截断或填充到模型所需的固定长度。

6、模型训练

    主要是通过导入大量的数据,进行处理之后给模型源代码进行训练,训练之后模型就有了权重。在作者看来,经过训练之后的权重就像是小孩学习之后有自己的判断能力,他的用处主要是:

预测/推断:训练后的权重捕捉了模型从训练数据中学习到的模式和关系。当新的输入数据被送入模型时,这些权重被用来计算预测结果,无论是分类标签、回归值还是其他类型的输出。
决策制定:在实际应用中,如自动驾驶、医疗诊断、股票交易等,训练后的模型可以根据其权重来做出决策或提供建议。
特征理解:在某些情况下,训练后的权重可以帮助我们理解模型是如何处理输入数据的,哪些特征对于预测结果更为重要

    预训练是训练模型前的一个操作:随机初始化权重,在没有任何先验知识的情况下开始训练。训练可能需要几周的时间。这是一个简单的例子:

​​​​​​​

import jiebaimport tensorflow as tffrom tensorflow.keras.preprocessing.text import Tokenizerfrom tensorflow.keras.preprocessing.sequence import pad_sequencesfrom tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Embedding, LSTM, Dense
# 假设loadset是一个函数,用于加载数据集# 这里我们用一个占位符函数代替实际的加载过程def loadset():    # 这里应该是加载数据集的代码    # 返回数据和标签    return ["这是一个例句。", "这是另一个例句。"], [0, 1]
# 加载数据集texts, labels = loadset()
# 使用jieba进行分词texts = [" ".join(jieba.cut(text)) for text in texts]
# 使用Tokenizer进行词汇映射tokenizer = Tokenizer(num_words=10000)tokenizer.fit_on_texts(texts)sequences = tokenizer.texts_to_sequences(texts)
# 对序列进行填充以保证相同长度data = pad_sequences(sequences, maxlen=100)
# 构建模型model = Sequential()model.add(Embedding(10000, 128, input_length=100))model.add(LSTM(64))model.add(Dense(1, activation='sigmoid'))
# 编译模型model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# 训练模型model.fit(data, labels, epochs=10, batch_size=32)

    微调是在模型经过预训练后完成的训练。要执行微调,首先需要获取一个经过预训练的语言模型,然后使用特定任务的数据集执行额外的训练。

    Transformers提供了一个 Trainer 类在数据集上微调任何预训练模型。​​​​​​​

from transformers import BertTokenizer, BertForSequenceClassification, Trainer, TrainingArgumentsfrom datasets import load_dataset
# 加载预训练的tokenizer和模型tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')model = BertForSequenceClassification.from_pretrained('bert-base-chinese', num_labels=2)
# 加载数据集,这里以'huggingface/datasets'中的'glue'数据集的'sst2'任务为例# 你可以替换为你自己的中文数据集dataset = load_dataset('glue', 'sst2')
# 对数据集进行预处理def preprocess_function(examples):    return tokenizer(examples['sentence'], padding='max_length', truncation=True)
encoded_dataset = dataset.map(preprocess_function, batched=True)
# 定义训练参数training_args = TrainingArguments(    output_dir='./results',          # 输出目录    num_train_epochs=3,              # 训练轮数    per_device_train_batch_size=16,  # 每个设备的训练batch大小    per_device_eval_batch_size=64,   # 每个设备的评估batch大小    warmup_steps=500,                # 预热步数    weight_decay=0.01,               # 权重衰减    logging_dir='./logs',            # 日志目录    logging_steps=10,)
# 初始化Trainertrainer = Trainer(    model=model,    args=training_args,    train_dataset=encoded_dataset['train'],    eval_dataset=encoded_dataset['validation'],)
# 开始训练trainer.train()

三、使用

    模型的使用以前在c端都是智能客服和学习机、推荐系统之类的角色,即使智能性上升也很难做出质的改变。

    至于机器人的确也是很大的使用方向,智能性提升,机器人才能发挥用武之地,但是作者认为目前的工业水准还不足以支撑机器人的智能行动,还是会局限在简单动作

    除了模型对话之外,主要还是要学习使用AI工具,比如制作视频图片等等,很多公司都用模型和音频软件打通,然后由用户对工具输入指令并且不断微调,这个过程会减少人力成本,毕竟软件和软件对接操作,总归比人和软件交互友好。

    至于技术人员对AI的使用,神经网络算法、深度学习框架已经偏向于基石,一方面是对参与者的要求很高,一方面是很难进行优化研究,我们以后的目光应该集中在大模型的使用和训练微调。

    有初步理解的读者应该能明白,数据集的质量和引导性对于模型的智能效果影响是很大的,所以各种使用场景、专业知识、工作环境的数据就会影响模型的运转的效率和准确性。

    未来的使用方向一定是ToB的,还有内部环境使用,就像作者公司内部已经使用模型进行代码检查了,使用起来主要是把改动代码传递给模型,让他按照固定的输出模板进行评论

    这个过程最复杂的反而是输入文本(Prompt)的不断调整。举个例子,你让模型做代码检查,总不能说,你给我检查一下吧,你要告诉模型扮演的角色,输出什么(比如代码可读性、可维护性和可扩展性的改进;优化建议,考虑时间复杂性和性能;不要检查代码注释和其他代码样式问题等等),答案需要是一个特定模板的json,这样才可以解析,因为还有拿这个给去做画面展示呢。模型的交互也是多次的,毕竟代码改动很多,但是模型输入长度是有限制的。   

    后续还要进行模型微调,比如公司的基础组件、工具类的数据描述,不然AI代码检查就不理解这些,总是猜测这种代码有没有问题 

    所以一方面是AI工具的学习使用,一方面是模型的训练微调,两个方向是后面AI的主流

四、总结

    作者通过对话大模型对人工智能的架构做了一些介绍,但是还有很多细节和技术点在一篇文章是说不清的:比如自注意力机制、模型怎么集成深度学习框架、特征工程、领域适应、权重调整引导等等。后续作者会开更加细化的文章进行论述。

    这一篇主要是为了让大家对人工智能的架构有一个了解,还有明白我们以后会怎么样使用它。

    AI的出现和兴起是不可避免的,目前他会大幅度影响知识类的行业,比如律师、医生之类的咨询服务,大家应该积极面对,先一步掌握才是应对变局的方法

    

图片

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

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

相关文章

基于springboot的中小型医院网站源码数据库

基于springboot的中小型医院网站源码数据库 本基于Spring Boot的中小型医院网站设计目标是实现用户网络预约挂号的功能,同时提高医院管理效率,更好的为广大用户服务。 本文重点阐述了中小型医院网站的开发过程,以实际运用为开发背景&#x…

基于PHP+MySQL开发的百娣美业课程管理软件系统后端功能介绍

如何开发一个美容产业链的商户管理系统。 1. 需求分析。 在开发美容产业链商户管理系统之前,必须首先进行需求分析。商户需要明确自己的需求和目标,了解系统的功能模块和业务流程,为后续发展提供明确的方向。 2. 系统设计。 根据需求…

python常用基础知识

目录 (1)print函数 (2)注释 (3)input函数 (4)同时赋值和连续赋值 (5)type函数和id函数 (6)python赋值是地址赋值 (…

Qt编译和使用freetype矢量字库方法

在之前讲过QT中利用freetype提取字库生成图片的方法: #QT利用freetype提取字库图片_qt freetype-CSDN博客文章浏览阅读1.2k次。这是某个项目中要用到的片段,结合上一篇文章#QT从字体名获取字库文件路径使用// 保存位图int SaveBitmapToFile(HBITMAP hBi…

【会议征稿,ACM出版】第四届人工智能,大数据与算法国际学术会议 (CAIBDA 2024, 7/5-7)

由河南省科学院、河南大学主办,河南省科学院智慧创制研究所、河南大学学术发展部、河南大学人工智能学院承办的第四届人工智能,大数据与算法国际学术会议 (CAIBDA 2024)将于2024年7月5-7日于中国郑州隆重举行。CAIBDA 2024致力于为人工智能,大…

你还去营业厅注销流量卡吗?别浪费时间了,现在有三种方法都可以

家人们,不用的手机号你会注销吗?在这里小编提醒大家,不用的手机卡千万要记得注销,不能直接扔掉,不然可能收到天价欠费单。 ​  今天,小编整理汇总了三种常见的注销方法,不用再跑去营业厅了&a…

Spring的IOC(Inversion of Control)设计模式

Spring的IOC(Inversion of Control)是一种设计模式,它通过控制反转的思想来降低组件之间的耦合度。在Spring框架中,IOC容器负责管理应用程序中的对象,使得对象之间的依赖关系由容器来维护和注入。 以下是Spring IOC的…

google hack常用命令举例

Google 常用语法说明 site 指定域名 inurl URL 中存在的关键字页面 intext 网页内容里面的关键字 Filetype 指定文件类型 intitle 网页标题中的关键字 link 返回你所有的指定域名链接 info 查找指定站点信息 cache 搜索 Google 里的内容缓存 技巧 1:inurl&…

MySQL入门学习-数据查询.SELECT

MySQL是一种常用的关系型数据库管理系统,可以用于存储和管理大量的结构化数据。在MySQL中,SELECT语句用于从数据库中查询数据。它是最常用的SQL语句之一,具有以下特点: 1. SELECT语句用于从一个或多个表中选择数据,并…

拓展(华为优秀网站)

优秀网站示例: 鸿蒙内核源码分析 Feature Ability和AbilitySlice的关系 使用绘图组件Canvas绘制心率曲线图 多组示例演示三个样式的组合用法 列表组件ListContainer Linux下的Hi3861一站式鸿蒙开发烧录(附工具) 全球首发—鸿蒙开源平台…

碳纳米管须状触嗅觉多模态融合传感器在皮革奢侈品真伪鉴定下的设计探索

一、设计方案 1.传感器选择 触觉传感器:选择基于碳纳米管(CNT)聚合物的柔性MEMS触觉微传感器,由于碳纳米管具有高度的灵敏度和选择性、柔韧性,可以作为触觉传感器,检测材料的微观结构和机械特性。嗅觉传感…

网页打开:为什么国内用新标签页,国外用当前页?

想写这个话题很久了,因为用百度和Google搜索时,打开搜索结果链接时的交互差异,几乎每天都要提醍我一下。 网页打开——这个交互,在设计里,算是极微小,但影响极广泛的操作设计。甚至,因此形成了…

Android 不透明度颜色值

<!--百分比-开头字母--> <!--100% —#FF--> <!--99% — #FC--> <!--98% — #FA--> <!--97% — #F7--> <!--96% — #F5--> <!--95% — #F2--> <!--94% — #F0--> <!--93% — #ED--> <!--92% — #EB--> <!--91% …

【Python】图形用户界面设计

1、设计并编写一个窗口程序,该窗口只有一个按钮,当用户单击时可在后台输出hello world. import tkinter as tk def on_button_click():print("hello world") # 创建主窗口 root tk.Tk() root.title("Hello World Button") # 设置窗口大小 root.geometry…

代码随想录-算法训练营day41【动态规划04:01背包问题-滚动数组、分割等和子集】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第九章 动态规划part04● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集 正式开始背包问题,背包问题还是挺难的,虽然大家可能看了很多背包问题模板代码,感觉挺简单,…

SAP_SNOTE_补丁修复_全流程实战

SAP ABAP 顾问&#xff08;开发工程师&#xff09;能力模型-CSDN博客文章浏览阅读1.2k次。目标&#xff1a;基于对SAP abap 顾问能力模型的梳理&#xff0c;给一年左右经验的abaper 快速成长为三年经验提供超级燃料&#xff01;https://blog.csdn.net/java_zhong1990/article/d…

文字游侠AI丨简直是写作神器,头条爆文一键生成稳定赚米!附渠道和详细教程(只需四步)!

在数字时代的浪潮中&#xff0c;人们不断寻求网络空间中的商机&#xff0c;期望在互联网的浩瀚海洋里捕捉到稳定的财富。随着人工智能技术的突飞猛进&#xff0c;越来越多的AI工具被融入到各行各业&#xff0c;开辟了新天地&#xff0c;带来了创新的盈利模式。 其中&#xff0c…

回收站删除的照片怎么恢复?7个实用方法为你找回照片!

“我刚刚在对电脑上的照片进行清理&#xff0c;不小心错删了一张还需要的照片&#xff0c;但是在使用回收站时&#xff0c;将它删除了&#xff0c;有什么恢复回收站照片的简单方法吗&#xff1f;” 照片是我们生活点滴的见证&#xff0c;无论是外出旅游还是日常琐碎&#xff0c…

对话YashanDB CTO陈志标:如何推动国产数据库长远发展

深圳计算科学研究院&#xff08;以下简称“深算院”&#xff09;是深圳市人民政府2018年11月批准建设的“十大基础研究机构”之一&#xff0c;由深圳市科技创新委员会主管、深圳大学举办、深圳市龙华区人民政府共建的二类事业法人单位。 崖山数据库系统YashanDB是深算院完全自主…

Originx的创新解法之:应用程序故障篇

Originx并不期望做一个完整覆盖全栈的监控体系&#xff0c;而是利用北极星指标体系标准化找出故障方向&#xff0c;然后联动各种成熟的监控数据形成证据链条&#xff0c;并将各种数据融合在一个故障报告之中。更多信息请参考 Log | Metrics | Trace的联动方式探讨http://mp.wei…