HNU-人工智能-作业3

人工智能-作业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题

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于51单片机的直流电机调速设计

一.硬件方案 本系统采用STC89C51控制输出数据,由单片机IO口产生PWM信号,送到直流电机,直流电机通过测速电路将实时转速送回单片机,进行转速显示,从而实现对电机速度和转向的控制,达到直流电机调速的目的。…

C 基础环境配置(vscode || vs)

目录 一.发展 二. 环境设置 1.vs2022 2.vscode (1.)首先下载VsCode (2)安装vsCode插件 (3)下载MinGW-W64 (4)配置文件 (5)注意把里面配置的:mingw64路径改为自己的路径 (6)示例代码 三.总结 一.发展 编程语言的发展 机器语言(打孔纸带编程),汇编语言,高级语言,一步步…

超详细的前后端实战项目(Spring系列加上vue3)前端篇+后端篇(三)(一步步实现+源码)

好了,兄弟们,继昨天的项目之后,开始继续敲前端代码,完成前端部分(今天应该能把前端大概完成开启后端部分了) 昨天补充了一下登录界面加上了文章管理界面和用户个人中心界面 完善用户个人中心界面 修改一…

【对算法期中卷子的解析和反思】

一、程序阅读并回答问题&#xff08;共30分&#xff09; #include<cstdio>#include<cstring>#include<iostream>using namespace std;char chess[10][10];int sign[10];int n, k, ans;void dfs(int x, int k) { if (k 0){ans;return; } if (xk-1 >…

IDEA升级web项目为maven项目乱码

今天将一个java web项目改造为maven项目。 首先&#xff0c;创建一个新的maven项目&#xff0c;将文件拷贝到新项目中。 其次&#xff0c;将旧项目的jar包&#xff0c;在maven的pom.xml做成依赖 接着&#xff0c;把没有maven坐标的jar包在编译的时候也包含进来 <build>…

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

题目&#xff1a; 题解&#xff1a; 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…

NV-LIO:一种基于法向量的激光雷达-惯性系统(LIO)

论文&#xff1a;NV-LIO: LiDAR-Inertial Odometry using Normal Vectors Towards Robust SLAM in Multifloor Environments 作者&#xff1a;Dongha Chung, Jinwhan Kim NV-LIO&#xff1a;一种基于法向量的激光雷达-惯性系统&#xff08;LIO&#xff09;NV-LIO利用从激光雷…

ChatGPT魔法,定制个性化提示词!

扮演Prompt创作者的角色 我想让你成为我的Prompt创作者。你的目标是帮助我创建最佳的Prompt&#xff0c;这个Prompt将由 你ChatGPT使用。 你将遵循以下过程&#xff1a; 1.首先&#xff0c;你会问我Prompt是关于什么的。我会告诉你&#xff0c;但我们需要通过不断的重复来改进…

【动态规划】速解简单多状态类问题

目录 17.16 按摩师 题⽬描述&#xff1a; 解法&#xff08;动态规划&#xff09;&#xff1a; 1. 状态表⽰&#xff1a; 2. 状态转移⽅程&#xff1a; 3. 初始化&#xff1a; 4. 填表顺序 5. 返回值 代码 总结&#xff1a; 213.打家劫舍II&#xff08;medium&#x…

mysql内存和磁盘的关系

mysql内存和磁盘的关系 1.MySQL的内存和磁盘之间的关系是密切的。MySQL的数据存储在磁盘上&#xff0c;但为了高效地执行查询操作&#xff0c;它也会将数据页&#xff08;每个页通常为16KB&#xff09;读入内存。MySQL的缓冲池&#xff08;buffer pool&#xff09;是在内存中的…

网络安全防御之下一代防火墙部署思路分享

随着企业在数字化转型过程中不断深化&#xff0c;为了促进业务快速且安全地推出和更新&#xff0c;企业所采用的应用架构和部署方式经历了显著的演进&#xff1a;它们从单一应用转变为分层架构&#xff0c;进而发展为微服务架构&#xff1b;同时部署方式也由传统的本地部署进化…

Java面试八股之Thread类中的yeild方法有什么作用

Thread类中的yeild方法有什么作用 谦让机制&#xff1a;Thread.yield()方法主要用于实现线程间的礼让或谦让机制。当某个线程执行到yield()方法时&#xff0c;它会主动放弃当前已获得的CPU执行权&#xff0c;从运行状态&#xff08;Running&#xff09;转变为可运行状态&#…

详解make file中的notdir

在 Makefile 中&#xff0c;$(notdir names…) 是一个函数&#xff0c;用于获取一组文件名或路径中的文件名部分&#xff0c;并将其返回。 这个函数通常用于从给定的路径中提取文件名部分&#xff0c;非常适合在 Makefile 中进行文件处理操作。 语法&#xff1a; makefile C…

SpringBoot之@AutoConfigureBefore、@AutoConfigureAfter、@AutoConfigureOrder注解

前言 SpringBoot通过AutoConfigureOrder、AutoConfigureBefore、AutoConfigureAfter注解&#xff0c;控制自动配置类的实例化顺序。 Spring中控制Bean的实例化顺序 Spring中默认实例化顺序 创建实体类A、B、C Component public class A {public A() {System.out.println(&…

机器学习-3-特征工程的重要性及常用特征选择方法

参考特征重要性:理解机器学习模型预测中的关键因素 参考[数据分析]特征选择的方法 1 特征重要性 特征重要性帮助我们理解哪些特征或变量对模型预测的影响最大。 特征重要性是数据科学中一个至关重要的概念,尤其是在建立预测性任务的模型时。想象你正在尝试预测明天是否会下…

python中的-1是什么意思

python中的-1是什么意思&#xff1f; -1指的是索引&#xff0c;即列表的最后一个元素。 比如你输入一个列表&#xff1a; a &#xff1d; [1,2,3,4,5,6,7] a[-1]就代表索引该列表最后一个值&#xff0c;你可以 b a[-1] print(b) 结果如下&#xff1a; 7 索引从左往右是…

redisson 释放分布式锁 踩坑

java.lang.IllegalMonitorStateException: attempt to unlock lock, not locked by current thread by node id: 48c213c9-1945-4c1b-821e-6d32e347eb44 thread-id: 69 出错代码&#xff1a; private void insertHourLog(Timestamp lastHourStartTimeStamp) {RLock lock red…

一文了解MyBatis

文章目录 MyBatis1. MyBatis的执行流程2. MyBatis是否支持延迟加载3. MyBatis延迟加载的底层原理4. MyBatis的二级缓存机制用过吗5. 谈谈MyBatis框架的优势6. 简单描述MyBatis的工作原理7. MyBatis中的sql标签8. MyBatis中的${}和#{}的区别9. MyBatis中ResulyMap的作用[重要]10…

Vue进阶之Vue项目实战(四)

Vue项目实战 出码功能知识介绍渲染器性能调优使用 vue devtools 进行分析使用“渲染”进行分析判断打包构建的产物是否符合预期安装插件使用位置使用过程使用lighthouse分析页面加载情况使用performance分析页面加载情况应用自动化部署与发布CI/CD常见的CI/CD服务出码功能 出码…

【PHP小课堂】PHP中的网络组件相关函数

PHP中的网络组件相关函数 作为一门以 WEB 开发为主战场的编程语言来说&#xff0c;PHP 即使是在目前这个大环境下&#xff0c;依然也是 WEB 领域的头号玩家。我们在网络相关的功能中也提供了许多方便好用的函数组件&#xff0c;而且它们都是不需要安装扩展就能够使用的。今天&a…