2024-2025-1 20241314 《计算机基础与程序设计》第十周学习总结
2024-2025-1 20241314 《计算机基础与程序设计》第十周学习总结
作业信息
这个作业属于哪个课程 | 2024-2025-1-计算机基础与程序设计 |
---|---|
这个作业要求在哪里 | 2024-2025-1计算机基础与程序设计第十周作业 |
这个作业的目标 | 信息系统 数据库与SQL 人工智能与专家系统 人工神经网络 模拟与离散事件 排队系统 天气与地震模型 图形图像 |
作业正文 | 正文 |
教材学习内容总结
计算机科学概论(第七版)第12,13,14章
第12章:计算机网络
网络基础知识
网络类型:
局域网(LAN):通常覆盖较小的区域,如家庭、办公室,速度快,成本低。
广域网(WAN):覆盖范围广,如城市间、国家间的网络,通常由电话线、光纤等传输介质组成。
网络拓扑:讨论网络的物理和逻辑布局,例如星型、环型、总线型等。
网络协议:
定义通信的规则和标准,如HTTP(用于网页),FTP(文件传输)等。
互联网概述
互联网的构成:包括服务器、客户端、路由器等设备的工作原理。
传输协议:
TCP/IP协议:解释TCP(传输控制协议)和IP(互联网协议)的作用,以及它们如何一起工作来确保数据可靠传输。
域名系统(DNS):介绍如何将域名转换为IP地址。
网络安全
常见威胁:恶意软件、网络钓鱼、DDoS攻击等。
安全措施:防火墙、加密技术、VPN(虚拟私人网络)的使用,以及用户教育和随意密码的风险。
安全标准与协议:如SSL/TLS(用于安全的数据传输)和HTTPS(安全的HTTP)。
第13章:数据库管理
数据库概念
数据库与数据库管理系统(DBMS)的定义:数据库是有组织的数据集合,而DBMS是用于创建、管理和操作数据库的软件。
数据模型:主要介绍关系模型,包括表、行和列的概念。
SQL语言
基本SQL命令:
SELECT: 用于数据查询。
INSERT: 用于插入数据。
UPDATE: 用于更新已有数据。
DELETE: 用于删除数据。
复杂查询:如何使用连接(JOIN)和子查询(subqueries)等来处理复杂的数据检索。
数据库设计
数据规范化:介绍如何有效组织数据以减少冗余和依赖关系。
实体-关系(ER)模型:使用图形化的方式展示实体以及它们之间的关系,以帮助进行系统设计。
第14章:人工智能
人工智能的定义与发展
人工智能的概念:强调模仿人类智能的能力,如学习、推理和自我修正。
发展历史:简要回顾人工智能的历史,从早期的规则系统到现代的深度学习技术。
机器学习与深度学习
机器学习:
监督学习:解释如何使用已标记的数据进行训练,以识别模式和预测。
无监督学习:展示如何与未标记的数据一起工作,以发现数据的内在结构。
深度学习:介绍神经网络的基本结构,如何通过多层网络处理复杂数据(如图像和语音)。
伦理与社会影响
AI对社会的影响:讨论AI在医疗、金融、教育等领域的潜在应用及其带来的变革。
伦理问题:探讨AI在工作替代、隐私侵犯和算法偏见等方面带来的伦理挑战。
未来发展方向:讨论对AI前景的不同看法,包括乐观与悲观的观点。
《C语言程序设计》第9章
-
函数的概述
函数是C语言中的基本组成部分,允许程序员将特定功能的代码块独立开来,以提高代码的可重用性和可维护性。一个函数由三部分组成:函数头、参数列表和函数体。函数头包括返回类型和函数名,参数列表则列出输入参数的类型和名称,而函数体则包含具体的代码逻辑。 -
函数参数
函数参数是传递给函数的输入数据。在C语言中,参数可以通过两种方式传递:传值和传引用。传值调用是将实参的值复制给形参,这意味着函数内部对参数的修改不会影响外部变量。传引用调用则是将变量的地址作为参数传递,允许函数在内部直接修改外部变量的内容。这种方式对于处理大型数据结构(如数组或结构体)时尤其有效,因为它避免了不必要的数据复制。 -
递归函数
递归函数是直接或间接调用自身的函数。递归通常用来处理可以分解成更小的子问题的问题,比如计算阶乘、斐波那契数列等。递归函数必须具备两个关键元素:基本情况和递归条件。基本情况定义了函数停止调用自身的条件,而递归条件则是函数反复调用自身以解决缩小后的子问题。 -
指针的基础
指针是C语言中非常重要的概念,用于存储变量的地址。指针通过其地址可以直接访问和修改目标变量的值。指针的声明包含数据类型和星号符号,用于指示该变量是一个指向特定类型数据的指针。指针还可以用于动态内存管理,从而提高内存使用效率。 -
动态内存分配
动态内存分配是指在程序运行时分配内存,而不是在编译时。这是通过特定的函数实现的,如malloc、calloc、realloc和free。动态内存分配允许程序根据实际需要请求内存,并在使用完成后释放这些内存,以避免内存泄漏。通过动态分配内存,程序能够处理不可预知的数据量和大小,增强了灵活性。 -
回调函数
回调函数是指被作为参数传递给其他函数的函数。这种机制使得程序可以在特定事件发生时执行自定义的处理逻辑。回调函数在事件驱动编程和异步处理中特别常见,允许程序在某一操作完成后执行特定任务,提高了应用程序的灵活性。 -
函数的作用域与生存期
函数内的局部变量只在函数调用期间有效,而全局变量则在程序的整个生命周期内有效。尽管局部变量在栈内存中分配,它们的作用域仅限于函数内部。通过使用static关键字,定义的静态变量在程序的生命周期内保留其值,但它们的作用域仍限于定义它们的函数。 -
函数指针
函数指针是指向函数的指针,可用于动态选择函数的执行或作为参数传递给其他函数。通过函数指针,可以在运行时决定调用哪个函数,这对于实现回调和处理多种行为尤其重要。
教材学习中的问题和解决过程
问:指针怎么用于动态内存管理
答:
- 动态分配内存:使用 malloc()、calloc() 或 realloc() 函数来分配内存。例如:
c
int *ptr = (int *)malloc(sizeof(int) * 10); // 分配10个整型大小的内存
- 访问和修改数据:通过指针可以直接访问和修改动态分配的内存中的数据。例如:
c
ptr[0] = 1; // 设置第一个元素的值为1
- 释放内存:使用 free() 函数释放不再需要的内存,以避免内存泄漏。例如:
c
free(ptr); // 释放之前分配的内存
总结:指针使程序能够灵活地管理动态内存,包括分配、访问和释放内存。
问:为什么要进行动态内存分配
答:动态内存分配提供了一种灵活的内存管理方式,主要有以下几个原因和优点:
节省内存空间:
在程序运行时,根据需要分配内存,可以有效避免预先分配过多内存导致的浪费。对于只需要少量数据的情况,动态内存分配可以按需申请所需的内存大小。
支持可变大小的数据结构:
动态内存分配可以便捷地创建和管理可以变化大小的数据结构,例如链表、动态数组、栈和队列。这使得程序能够灵活处理不确定大小的数据集,增加了数据结构的灵活性和扩展性。
生命周期管理:
动态分配的内存可以根据需要在程序运行时随时分配和释放,允许开发者对内存的使用时间和生命周期进行更精细的控制。
处理大型数据:
对于需要处理大量数据或非常大的对象,动态内存分配可以在堆区申请足够的内存,而堆区的大小通常大于栈区。这在处理大型数组或复杂数据结构时尤其重要。
避免栈溢出:
静态分配的内存存放在栈中,如果数据量过大很容易导致栈溢出。动态分配的内存在堆中,通常能提供更大的内存空间,帮助避免此问题。
适应运行时条件:
动态内存分配允许程序根据实际运行时的条件(如用户输入、系统状态等)来调整内存使用,这在很多应用场景中非常重要,例如图像处理、游戏开发和科学计算等领域。
总之,动态内存分配运用指针和分配函数提供了一种灵活且高效的内存管理方法,使得程序能够处理复杂的数据结构和不确定的数据量,提升了程序的性能和适应性。
问:深度学习的底层逻辑
答:
深度学习的底层逻辑主要涉及一系列数学和计算原理,支撑着其模型的设计和训练。以下是深度学习的几个关键概念和逻辑:
- 人工神经网络(ANN)
深度学习的基础是人工神经网络,灵感来自于人脑的神经元结构。神经网络由层(层次)组成,通常包括输入层、隐藏层和输出层:
神经元:每个神经元接收输入信号,通过加权和非线性激活函数生成输出。
层:输入层接收原始数据,隐藏层处理数据,输出层生成最终结果。
2. 加权和与激活函数
每个神经元的输出是输入信号的加权和,通常使用以下计算公式:
z=w1x1+w2x2+...+wnxn+b
其中,w 是权重,x 是输入,b 是偏置。
激活函数(如ReLU、Sigmoid、Tanh等)对加权和
𝑧
z进行非线性转化,使得神经网络能够学习复杂的模式。
-
前向传播
在每次训练迭代中,输入数据通过网络进行前向传播,计算每层的输出,最终得到网络的预测结果。这些预测结果与实际标签之间的误差(损失)用于评估模型的性能。 -
损失函数
损失函数衡量模型预测与真实值之间的差异,常见的损失函数包括:
均方误差(MSE):适用于回归问题。
交叉熵损失:适用于分类问题。
损失函数的值越小,表示模型的预测结果越好。
- 误差反向传播(Backpropagation)
反向传播算法是训练神经网络的核心,通过计算损失函数相对于各层权重的梯度,逐层更新权重,目的是最小化损失函数。这一过程包括以下几个步骤:
计算输出层的梯度:根据损失函数计算 outputs 相对于各个参数的梯度。
按层工作:使用链式法则将误差信号从输出层反向传播至隐藏层和输入层,计算隐藏层的梯度。
更新权重:根据计算的梯度调整权重和偏置,更新方式通常使用梯度下降法。
6. 优化算法
为了更有效地更新权重,常用各种优化算法(如SGD、Adam、RMSprop等)来实现权重更新。这些算法不仅采用当前梯度,还考虑历史梯度,能够加速收敛,提高训练效率。
-
正则化
为了防止过拟合,通常会对模型引入正则化技术,如L1正则化、L2正则化和Dropout等。正则化限制模型的复杂性,促使其泛化能力增强。 -
批处理与迭代训练
深度学习模型通常使用批处理(Batch Processing)训练,将数据分成小批次输入神经网络,更新后的权重在批次之间共享。通过多次迭代(Epochs),模型会逐渐收敛到一个较优的解。 -
深度学习框架
为了简化深度学习模型的开发,常用框架(如TensorFlow、PyTorch等)提供了丰富的功能和工具,能够灵活实现前述逻辑,加速模型构建和调试过程。
总结
深度学习的底层逻辑围绕着神经网络的结构,利用数学算法实现输入到输出的学习过程。通过加权、激活、前向传播、反向传播和优化机制,深度学习模型能够自动提取数据中的特征与模式,以实现复杂任务的解决。这些逻辑相互关联,共同构成了深度学习的核心运作原理。
基于AI的学习