HNU-人工智能-作业3

news2024/11/17 19:39:09

人工智能-作业3

计科210X 甘晴void 202108010XXX

1.贝叶斯网络

根据图所给出的贝叶斯网络,其中:P(A)=0.5,P(B|A)=1, P(B|¬A)=0.5, P(C|A)=1, P(C|¬A)=0.5,P(D|BC)=1,P(D|B, ¬C)=0.5,P(D|¬B,C)=0.5,P(D|¬B, ¬C)=0。试计算下列概率P(A|D)。

解:

2.不确定性的量化

某学校,所有的男生都穿裤子,而女生当中,一半穿裤子,一半穿裙子。男女比例70%的可能性是4:6,有20%可能性是1:1,有10%可能性是6:4,问一个穿裤子的人是男生的概率有多大?

解:

3.决策树

设样本集合如下表格,其中A、B、C是F的属性,请根据信息增益标准(ID3算法),画出F的决策树。其中

ABCF
0000
0011
0100
0111
1001
1011
1100

解:

4.人工神经网络

阈值感知器可以用来执行很多逻辑函数,说明它对二进制逻辑函数与(AND)和或(OR)的实现过程。

解:

二进制逻辑函数与(AND)和或(OR)只在训练样本上有区别,在训练过程上是一致的。

这是与(AND)函数的训练样本

X1X2Y
000
010
100
111

这是或(OR)函数的训练样本

X1X2Y
000
011
101
111

下面我们以AND为例,进行一次训练过程

这是感知机示意图

下面是训练步骤:

  • (1)初始化:设定初始的权值w1,w2,和θ阈值为[-0.5,0.5]之间的随机数,(即刚开始的数值不重要,后续都会通过样本迭代修正收敛)

  • (2)计算得到Y(p):根据输入x1 (p), x2 (p) 和权值w1,w2计算输出Y(p),其中p表示迭代的轮数

  • (3)更新权值:按照下述公式计算下一轮的权重值

    • e(p) = Yd(p) - Y(p)

    • Δwi(p) = α · xi(p) · e(p)

    • wi(p+1) = wi(p) + Δwi(p)

  • (4)迭代循环:增加p值,不断重复步骤(2)-(3)直到收敛(即e在一段循环间小于一个较小值)

我使用python写了一个简单的逻辑

import numpy as np

# 简单感知器
class Perceptron(object):
    def __init__(self, lr, epoch):
        # 指定 X 维度数,这里是2
        self.input_dim = 2
        # 指定激活函数,这里用阶跃函数
        self.activator = self.__step
        # 指定学习率与训练轮数
        self.lr = lr
        self.epoch = epoch
        # 权重向量初始化为[-0.5,0.5]随机数
        self.weights = np.random.uniform(-0.5, 0.5, self.input_dim)
        self.bias = np.random.uniform(-0.5, 0.5)

    # 阶跃函数
    def __step(self, x):
        return 1 if x > 0 else 0

    # 返回感知机的参数
    def __str__(self):
        return 'weight: %s\n  bias: %f\n' % (self.weights, self.bias)

    # 正向传播
    def __forward(self, X):
        y_temp = np.dot(self.weights, X) + self.bias
        Y = self.activator(y_temp)
        return Y

    # 训练
    def __train(self, inputs, labels):
        for _ in range(self.epoch):
            samples = zip(inputs, labels)
            for input, label in samples:
                output = self.__forward(input)
                self.__update_weights(input, output, label)

    # 反向传播,更新数值
    def __update_weights(self, input, output, label):
        delta = label - output
        self.weights += self.lr * delta * input
        self.bias += self.lr * delta

    # 训练(外部接口)
    def train(self, inputs, labels):
        self.__train(inputs, labels)

    # 预测(外部接口)
    def predict(self, X):
        return self.__forward(X)


def get_train_dataset(mode):
    # 构建训练数据
    if mode=="and":
        input_vecs = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])  # X
        labels = np.array([0, 0, 0, 1])  # labels
        return input_vecs, labels
    if mode=="or":
        input_vecs = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])  # X
        labels = np.array([0, 1, 1, 1])  # labels
        return input_vecs, labels

if __name__ == "__main__":
    # 选择模式 and 还是 or , 直接输入即可
    mode = "or"

    # 实例化感知机
    perceptron = Perceptron(lr=0.001,epoch=1000)
    # 获取数据集
    input_vecs, labels = get_train_dataset(mode=mode)
    # 训练
    perceptron.train(input_vecs, labels)
    # 输出权重信息
    print(perceptron)
    #测试真值表
    print("0 {mode} 0 = {ans}".format(mode=mode,ans=perceptron.predict([0, 0])))
    print("0 {mode} 1 = {ans}".format(mode=mode,ans=perceptron.predict([0, 1])))
    print("1 {mode} 0 = {ans}".format(mode=mode,ans=perceptron.predict([1, 0])))
    print("1 {mode} 1 = {ans}".format(mode=mode,ans=perceptron.predict([1, 1])))

可以运行看看结果

# or
weight: [0.10514797 0.49573695]
  bias: -0.104832

0 or 0 = 0
0 or 1 = 1
1 or 0 = 1
1 or 1 = 1

# and
weight: [0.12922707 0.00225016]
  bias: -0.131045

0 and 0 = 0
0 and 1 = 0
1 and 0 = 0
1 and 1 = 1

5.深度学习

深度学习的原理是什么?以一个典型的深度学习算法为例进行说明。

解:

【深度学习的原理】

深度学习的原理主要基于神经网络模型的训练和优化,它包含了多个层次的神经元,每一层都会对输入数据进行一系列非线性变换和特征提取,最终输出结果。

★深度学习相对于普通神经网络的主要特点在于:使用包含多个隐层的深层神经网络。这也是深度学习为什么能够做的比普通神经网络好的原理所在。

典型的深度学习算法包括卷积神经网络(Convolutional Neural Networks, CNN)、循环神经网络(Recurrent Neural Networks, RNN)、长短期记忆网络(Long Short-Term Memory, LSTM)和注意力机制(Attention Mechanism)等。

【举例说明】

接下来我将以典型深度学习模型之一的 Transformer 为例,简要说明深度学习(主要是注意力机制)的原理:

这是经典的《attention is all you need》论文中的transformer结构

(1)原理概述

Transformer 是一种用于处理序列数据的深度学习模型,最初用于自然语言处理任务,如机器翻译和语言建模。其核心思想是完全基于注意力机制,通过自注意力机制(self-attention mechanism)来捕捉输入序列中的依赖关系,从而实现对序列数据的建模和处理。

(2)自注意力机制(Self-Attention Mechanism)

自注意力机制是 Transformer 模型的核心组成部分,用于学习序列中不同位置之间的关系。在自注意力机制中,每个输入位置都可以与其他所有位置进行交互,从而使得模型能够在不同位置之间学习到不同程度的依赖关系。

自注意力机制的计算过程如下:

  • 对于输入序列中的每个位置,计算其与所有其他位置的注意力权重。

  • 使用注意力权重对所有位置的特征进行加权求和,得到每个位置的输出表示。

Attention(multi)包括三个注意力层

  • (encoder)自注意力层

  • (decoder)遮盖多头注意力层

  • (decoder)交互注意力层

(3)Transformer 模型结构

Transformer 模型由编码器(Encoder)和解码器(Decoder)组成,每个编码器和解码器都由多个注意力层和前馈神经网络层组成。

  • 编码器(Encoder):用于将输入序列编码为表示丰富的特征向量,其中每个位置都包含输入序列的全局信息。

    • 包含多个注意力层(self-attention)和前馈神经网络层。

  • 解码器(Decoder):根据编码器生成的特征向量来生成输出序列。

    • 包含多个注意力层(self-attention)和编码器-解码器注意力层(encoder-decoder attention)以及前馈神经网络层。

(4)Transformer 训练过程

  • 输入序列经过编码器得到特征表示。

  • 特征表示经过解码器生成输出序列。

  • 训练过程中通过反向传播算法更新模型参数,使得模型输出的序列尽可能地接近目标序列。

(5)优势

  • 可并行化处理:Transformer 模型中的注意力机制使得模型能够并行化处理输入序列中的不同位置,从而加速模型训练和推理过程。

  • 长距离依赖建模:通过自注意力机制,Transformer 能够更好地捕捉输入序列中不同位置之间的长距离依赖关系,从而提高模型的建模能力。

参考答案

第1题

第2题

第3题

第4题

第5题

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

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

相关文章

链式法则:神经网络前向与反向传播的基石

在深度学习的浪潮中,神经网络以其强大的学习和预测能力,成为解决复杂问题的有力工具。而神经网络之所以能够不断学习和优化,离不开两个核心过程:前向传播和反向传播。其中,链式法则作为微积分学中的一个基本概念&#…

闲鱼电商运营高级课程,一部手机学会闲鱼开店赚钱

课程下载:https://download.csdn.net/download/m0_66047725/89360471 更多资源下载:关注我。 课程内容: 10-9、怎么寻找优质的货源店铺.mp4 11-10、怎么去选择商品图片.mp4 12-11、商品图片的注意避免事项.mp4 13-12、怎么写标题.mp4 …

C++ 基于vs2019创建并使用动态链接库(dll)

库的基本认识 静态库(Static Library) 基本概念:静态库是在编译时链接到目标程序中的库文件。它包含了程序运行所需的所有函数和数据,这些函数和数据会被直接嵌入到最终生成的可执行文件中。静态库通常以.a(在Unix-l…

三步走,Halo DB 安装指引

前文介绍了国产数据库新星 Halo 数据库是什么, 哈喽,国产数据库!Halo DB! ★ HaloDB是基于原生PG打造的新一代高性能安全自主可控全场景通用型统一数据库。 业内首次创造性的提出插件式内核架构设计,通过配置的方式,适…

美光拟投巨资在日本广岛建DRAM厂,目标2027年底投产

美光科技(Micron Technology)据日本媒体报道,计划在日本广岛县新建一座DRAM芯片生产工厂,目标最快于2027年底投入运营。这一举措标志着美光在增强其内存芯片生产能力方面的又一重大步伐。 报道称,新工厂的总投资规模预…

【CALayer-CALayer的基本属性 Objective-C语言】

一、接下来,我们来说这个Layer啊, 1.首先,Layer能接触到的,就是我们之前说截图啊,就是我们self.view里面,有一个layer属性, [self.view.layer renderInContext:(CGContextRef t)]; 那个里面,有一个layer属性,然后呢,是CALayer类型的, 接下来,我们就来学习一…

union all 以及标量子查询执行计划

SELECT 1, (SELECT ID1 FROM TE WHERE IDA.ID2) FROM .TA A WHERE COLA X UNION ALL SELECT 1, (SELECT ID2 FROM TD WHERE IDA.ID1) FROM .TB A WHERE COLA X UNION ALL SELECT 1,COL2 AS PARENT_UUID FROM .TC a WHERE COLA X 三个union all 看着像是5个table joi…

做好开源快速开发平台研发创新 助力行业高效发展!

随着信息化时代的到来,科技的力量无处不在。为了提高办公效率,很多大中型企业倾向于使用更为先进的软件平台来助力企业降本增效。在众多助力神器之中,开源快速开发平台低代码技术平台深得广大新老客户朋友的喜爱,它与生俱来的优势…

Python中Web开发-Django框架

大家好,本文将带领大家进入 Django 的世界,探索其强大的功能和灵活的开发模式。我们将从基础概念开始,逐步深入,了解 Django 如何帮助开发人员快速构建现代化的 Web 应用,并探讨一些最佳实践和高级技术。无论是初学者还…

APM2.8内置罗盘校准

如果你有外置罗盘,可以不用校准内置罗盘,可以忽略此文。推荐使用外置罗盘,内置罗盘容易受干扰。 使用内置罗盘需要插入飞控GPS接口旁边的跳线帽。如图: 如果要使用内置罗盘,而又加了GPS的,记得一定要把GPS…

手机性能过剩?三年前的改名芯片卡顿明显,中端机太弱鸡了

业界人士都喜欢说手机的性能已经严重过剩,笔者近期从运营商购买了两款手机,搭载的芯片是联发科的改名芯片,以及高通的低端芯片,使用中明显卡顿,显示出这些改名芯片的性能早已落后于时代。 其中一款为OPPO A2&#xff0…

【Mybatis】映射文件中获取参数的符号#{}和${}的区别

在xml映射文件中获取参数的符号都是用的#{}的方式,其实Mybatis还支持另一种符号来接收传递过来的参数值,就是${},他们是区别就在与底层使用jdbc的statement不一样 #{}对应的是PreparedStatementd对象来执行sql语句 ${}对应的是Statement对象…

【TCP协议中104解析】wireshark抓取流量包工具,群殴协议解析基础

Tcp ,104 ,wireshark工具进行解析 IEC104 是用于监控和诊断工业控制网络的一种标准,而 Wireshark则是一款常用的网络协议分析工具,可以用干解析TEC104 报文。本文将介绍如何使用 Wireshark解析 IEC104报文,以及解析过 程中的注意事项。 一、安…

Revit——(2)模型的编辑、轴网和标高

目录 一、关闭缩小的隐藏窗口 二、标高(可创建平面,其他标高线复制即可) 三、轴网 周围的四个圈和三角表示四个里面,可以移动,不要删除 一、关闭缩小的隐藏窗口 二、标高(可创建平面,其他标…

JDK9-21新特性概览(持续更新)

JDK9-21新特性概览 一、JDK9新特性1.1 JEP 102: Process API Updates简介案例风险 1.2 JEP 193: Variable Handles简介案例风险 1.3 JEP 200: The Modular JDK简介案例风险 1.4 JEP 213: Milling Project Coin简介案例1.1 try-with-resources增强1.2 接口中私有方法 1.5 JEP 22…

Sentinel-2 哨兵二号数据介绍及下载

1 Sentinel-2简介 SENTINEL-2 is a European wide-swath, high-resolution, multi-spectral imaging mission. Sentinel-2 是高分辨率多光谱成像卫星,一颗卫星的重访周期为10天,两颗互补,重访周期为5天。分为2A和2B两颗卫星。2A于2015年6月…

【Mybatis】映射文件中获取参数的类型是集合或数组处理

基本数据类型的参数或者对象作为参数的情况,在Mybatis还有一些特殊处理的参数类型要特别注意:如果参数类型是集合Collection(List,Set)或者是数组,Mybatis也会把这些类型的参数封装在一个Map对象中传递到xm…

电脑记事软件哪款安全?好用且安全的桌面记事工具

在快节奏的现代生活中,我们每天都要用电脑处理大量的工作。电脑不仅提升了工作效率,还成为了我们记录重要事项和灵感的得力助手。比如,在策划项目时,我会直接在电脑上列出要点和步骤;在开会时,我也会用电脑…

Python | Leetcode Python题解之第117题填充每个节点的下一个右侧节点指针II

题目: 题解: class Solution:def connect(self, root: Node) -> Node:if not root:return Nonestart rootwhile start:self.last Noneself.nextStart Nonep startwhile p:if p.left:self.handle(p.left)if p.right:self.handle(p.right)p p.nex…

【Mybatis】映射文件中获取单个参数和多个参数的写法

xml的映射文件中获取接口方法中传来的参数是直接用#{}的方式来获取的 那么接下来,我们就具体来说一下获取参数里边的各种规则和用法 1.单个参数,比如上面的getOneUser,只有一个id值作为参数 Mybatis对于只有一个参数的情况下,不…