深度学习.ai笔记(1): 深入理解神经网络架构

需积分: 9 0 下载量 176 浏览量 更新于2024-09-08 收藏 787KB PDF 举报
"这是关于Andrew Ng的DeepLearning.ai课程的学习笔记,主要聚焦于神经网络的理论架构,包括前向传播、反向传播以及相关的数学概念。笔记涵盖了从逻辑回归到深层网络的基本构造,还讨论了超参数对模型训练的影响。" 在深入理解深度学习的神经网络(NN)时,首先我们需要掌握的是基础理论,例如逻辑回归。逻辑回归是神经网络的一个简单形式,常用于二分类问题,其输出是对输入线性组合后的Sigmoid函数,为概率估计提供了一个连续的输出。 神经网络的前向表示(Forward Propagation)是指从输入数据到预测输出的计算过程。每个神经元接收来自上一层的加权输入,经过激活函数处理后产生输出,这个过程会逐层进行,直到得到网络的最终预测。激活函数如Sigmoid、ReLU或Tanh,它们引入非线性,使网络有能力学习复杂的模式。 神经网络的反向求梯度(Backpropagation)是训练过程中优化权重的关键步骤。它通过链式法则计算损失函数相对于权重的梯度,从而更新权重以减少损失。反向传播过程中,计算每一层的dz(误差项)和da(激活函数的导数),然后更新dw(权重)和db(偏置)。 Broadcasting在向量化计算中是一个重要的概念,特别是在处理形状不匹配的数据时。例如,在计算softmax时,如果需要对每个样本进行独立的归一化,broadcasting允许我们对整个数据矩阵执行操作,而无需显式地处理每个元素。 深网络的结构块包括多个隐藏层,每层可能包含多个神经元。在反向传播中,输入是da[l],并且dz[l]的计算遵循相同的公式,即dz[l]=da*(∂a/∂z),这个公式适用于所有层,除了输出层,因为输出层的激活函数通常不同,如Softmax或Sigmoid。 在神经网络的参数设置中,权重W和偏置b被视为模型参数,它们通过反向传播学习得到。另一方面,超参数如学习率(α)、迭代次数、隐藏层数量、隐藏层单元数和激活函数等,是人为设定的,它们影响着模型的训练过程和性能。例如,学习率决定了每次权重更新的幅度,迭代次数决定模型训练的轮数,隐藏层和单元数影响模型的复杂度,而激活函数则影响网络的非线性表达能力。 在实际应用如Caffe框架中,超参数的设置通常在solver prototxt文件中定义,如学习率策略、迭代次数等,这些都是影响模型训练效果的关键因素。理解并适当地调整这些超参数是构建高效深度学习模型不可或缺的部分。

def __next_step(self, x, y): if not self.judge_colory: self.__history += 0 else: self.__history += 1 self.color = 1 if self.__history % 2 == 0 else 2 if self.start_ai_game: if self.ai_color == self.color: row,col = self.ai_stage(self.ai_game()[0],self.ai_game()[1]) else: col = round((x-self.__margin*2)/self.__cell_width) row = round((y-self.__margin*2)/self.__cell_width) stage_row = (y-self.__margin)-(self.__cell_width*row+self.__margin) stage_col = (x-self.__margin)-(self.__cell_width*col+self.__margin) if stage_col < stage_row: self.direct= 1 else: self.direct= 0 else: col = round((x - self.__margin * 2) / self.__cell_width) row = round((y - self.__margin * 2) / self.__cell_width) stage_row = (y - self.__margin) - (self.__cell_width * row + self.__margin) stage_col = (x - self.__margin) - (self.__cell_width * col + self.__margin) if stage_col < stage_row: self.direct = 1 else: self.direct= 0 if self.valide(row, col, self.direct): if self.__history % 4 == 0 or (self.__history + 2) % 4 == 0: self.__game_board.drew_turn(2) else: self.__game_board.drew_turn(1) self.add_logic(row, col, self.color) self.__game_board.draw_chess(row, col, self.color, self.direct) if self.judge_owner(row, col, self.color, self.direct): self.__game_board.drew_turn(self.judge_next(self.color)) for i in self.judge_owner(row, col, self.color, self.direct): x,y=self.draw_owner(i) self.__game_board.drew_owner(self.color, y, x) else: self.__game_board.drew_turn(self.color) self.judge_color(row, col, self.color, self.direct) print(self.logic_board_state) if 0 not in self.logic_board_owner: self.__game_board.pop_win(self.judge_winner())

2023-07-14 上传