当前位置: 首页 > news >正文

78建筑网站静态网站设计心得

78建筑网站,静态网站设计心得,顺企网官网登录入口,晋江市住房和城乡建设局网站是多少文章目录 计算图符号微分符号微分的步骤示例符号微分在计算图中的使用总结 数值微分前向差分法中心差分法数值微分的使用注意事项总结 自动微分1. 基本原理2. 主要类型3. 计算图4. 应用5. 工具和库6. 优点和缺点 计算图1. **计算图的建立**2. **前向传播**3. **反向传播**4. **… 文章目录 计算图符号微分符号微分的步骤示例符号微分在计算图中的使用总结 数值微分前向差分法中心差分法数值微分的使用注意事项总结 自动微分1. 基本原理2. 主要类型3. 计算图4. 应用5. 工具和库6. 优点和缺点 计算图1. **计算图的建立**2. **前向传播**3. **反向传播**4. **链式法则和梯度计算**5. **优点**例子步骤1: 定义变量和运算步骤2: 创建节点步骤3: 创建边步骤4: 执行前向传播步骤5: 可选执行反向传播 计算图 符号微分 符号微分Symbolic Differentiation是一种使用数学表达式来表示微分或导数的技术。与数值微分不同符号微分不是通过逼近来计算导数而是直接处理数学表达式得到一个精确的表达式表示该函数的导数。 符号微分的步骤 表达式定义首先你需要一个表达式例如一个多项式或任何可以微分的数学函数。 应用微分规则然后你会应用一系列微分规则如乘积规则、商规则、链式法则等来对表达式进行微分。 简化表达式最后你可能需要使用一些代数技巧来简化得到的导数表达式。 示例 假设你有一个函数 f ( x ) x 2 3 x 2 f(x) x^2 3x 2 f(x)x23x2并且你想要找到其导数。通过符号微分你可以应用基本的导数规则 d d x x n n ⋅ x n − 1 \frac{d}{dx} x^n n \cdot x^{n-1} dxd​xnn⋅xn−1 d d x c 0 \frac{d}{dx} c 0 dxd​c0 其中 c c c 是常数线性函数的导数等于其系数 这样你可以找到 f ( x ) f(x) f(x)的导数 f ′ ( x ) 2 ⋅ x 1 3 ⋅ 1 0 2 x 3 f(x) 2 \cdot x^1 3 \cdot 1 0 2x 3 f′(x)2⋅x13⋅102x3 符号微分在计算图中的使用 在深度学习中符号微分经常与计算图结合使用 前向传播通过计算图表示模型的前向计算。符号微分应用符号微分来表示每个操作的局部导数。反向传播使用链式法则和计算图中的局部导数来计算整个模型的梯度。 这个过程允许深度学习框架自动计算模型的梯度这是训练神经网络时所必需的。 总结 符号微分提供了一种精确、直接的方式来计算导数。在深度学习和其他科学计算应用中通过结合计算图符号微分使得自动求导和梯度下降优化变得可行和高效。不过对于非常复杂的表达式符号微分可能导致表达式膨胀从而增加了计算复杂性。因此有时可能会结合使用符号微分和数值微分方法。 数值微分 数值微分是一种近似计算函数导数的技术。与符号微分不同数值微分不是通过解析地处理数学表达式来找到导数的精确形式而是使用函数在特定点的数值来估计导数。 前向差分法 最简单的数值微分方法之一是前向差分法。假设你想要计算函数 f ( x ) f(x) f(x)在点 x x x处的导数你可以使用以下公式 f ′ ( x ) ≈ f ( x h ) − f ( x ) h f(x) \approx \frac{f(x h) - f(x)}{h} f′(x)≈hf(xh)−f(x)​ 其中 h h h是一个非常小的正数称为步长。这个公式给出了在 x x x附近的函数的斜率的近似值。 中心差分法 前向差分方法的一个问题是它可能不是非常精确特别是当 h h h相对较大时。更精确的方法是中心差分法使用以下公式 f ′ ( x ) ≈ f ( x h ) − f ( x − h ) 2 h f(x) \approx \frac{f(x h) - f(x - h)}{2h} f′(x)≈2hf(xh)−f(x−h)​ 中心差分通过计算 f ( x ) f(x) f(x)在 x x x附近的两点的平均斜率通常提供了更好的近似。 数值微分的使用 数值微分用于许多不同的应用领域包括 解析解不可用当函数的导数很难或不可能解析地找到时可以使用数值微分。 深度学习的梯度检查在深度学习中数值微分通常用于梯度检查以确保使用符号微分或自动微分计算的梯度是正确的。 科学和工程应用数值微分用于许多科学和工程应用其中需要近似导数但可能没有解析解。 注意事项 选择步长选择合适的步长 h h h是一个关键问题。太大的步长可能会导致近似不精确而太小的步长可能会导致数值不稳定。 数值不稳定当涉及极小或极大的值时数值微分可能会出现问题因为计算机浮点数的精度有限。 计算成本数值微分通常比符号微分更慢因为它需要多次评估函数。 总结 数值微分是一种有用的工具特别是当解析解不可用或难以获得时。它提供了一种灵活而实用的方法来近似导数但必须谨慎选择参数并注意可能的数值问题。在深度学习和其他领域它通常与符号微分或自动微分结合使用。 自动微分 视频链接【前向微分和正向微分怎么理解 自动微分Automatic Differentiation简称AD是一种高效计算函数导数或梯度的技术。它不同于数值微分和符号微分因为它可以提供更高的数值稳定性和计算效率。下面是自动微分的更多细节 1. 基本原理 自动微分基于链式法则进行它通过计算机程序来逐步计算和追踪函数的局部导数。基本的想法是将复杂函数分解为一系列简单的元素函数例如加法、乘法等并依次计算这些函数的导数。 2. 主要类型 自动微分可以分为两种主要类型 前向模式Forward Mode 在前向模式中我们从输入向量开始然后通过每一个操作前进计算每一步的局部导数和全局雅可比矩阵的相应部分。给定一个函数 f : R n → R m f: \mathbb{R}^n \rightarrow \mathbb{R}^m f:Rn→Rm前向模式特别适合 n ≪ m n \ll m n≪m 的情况。 反向模式Reverse Mode 在反向模式中我们首先进行一次正向传递来计算函数的输出然后从输出向后进行一次传递来计算梯度或雅可比矩阵的每一部分。反向模式特别适合于 n ≫ m n \gg m n≫m 的情况这也是为什么它被广泛应用于神经网络和深度学习因为我们通常有许多输入和少量输出例如损失函数。 3. 计算图 自动微分常常依赖于一个计算图来表示和跟踪函数的计算过程。计算图是一种图形数据结构其中每个节点代表一个操作每个边代表数据流。 4. 应用 自动微分被广泛应用于各种领域特别是在机器学习和优化问题中。它是训练神经网络时所用的反向传播算法的核心。 5. 工具和库 现有许多库和框架支持自动微分如TensorFlow、PyTorch等它们提供了方便的API来实现和使用自动微分技术。 6. 优点和缺点 优点 高数值稳定性比数值微分更稳定。高效特别是反向模式它可以高效地计算梯度尤其是对于有大量输入和少量输出的函数。 缺点 内存消耗反向模式可能需要大量的内存来存储中间结果。实现复杂性实现一个自动微分系统可能是非常复杂和技术性的。 计算图 自动微分通常是在计算图的基础上实现的。在计算图中一个复杂函数被分解为多个简单的操作这些操作被组织为一个有向图。现在让我们更详细地了解自动微分和计算图之间的关系 1. 计算图的建立 如我们前面所述首先我们需要建立一个计算图代表我们的函数。这涉及将函数分解为更简单的操作和变量然后以有向图的形式表示这些操作和变量。 2. 前向传播 在计算图中我们从输入变量开始然后按照图中的顺序进行操作直到我们计算出输出。这就是所谓的前向传播。 3. 反向传播 反向传播是自动微分的核心。在这一步我们从输出开始然后向后计算每一步的局部导数或梯度。这通常涉及应用链式法则这是一种从输出向输入反向传播导数的方法。 4. 链式法则和梯度计算 通过使用链式法则我们可以计算从输出到任何中间变量或输入的梯度。通过这种方式我们可以得到我们想要的所有导数而不是仅仅是输出相对于输入的导数。 5. 优点 精确度自动微分可以提供与解析解几乎相同的精确度。效率它通常比数值微分方法更快、更稳定尤其是对于具有许多变量的复杂函数。 例子 使用给定的函数 f ( x , y ) log ⁡ ( x ) x ⋅ y − sin ⁡ ( y ) f(x, y) \log(x) x \cdot y - \sin(y) f(x,y)log(x)x⋅y−sin(y)我们可以构建一个计算图将该函数分解为多个基本操作。下面是计算图的创建步骤 步骤1: 定义变量和运算 首先我们识别并定义所有的基本变量和运算 变量: x x x, y y y运算: log ⁡ ( x ) \log(x) log(x) x ⋅ y x \cdot y x⋅y sin ⁡ ( y ) \sin(y) sin(y)加法和减法来组合上述结果 步骤2: 创建节点 然后为每个变量和运算创建节点 节点1变量: x x x节点2变量: y y y节点3运算: log ⁡ ( x ) \log(x) log(x)节点4运算: x ⋅ y x \cdot y x⋅y节点5运算: sin ⁡ ( y ) \sin(y) sin(y)节点6运算: log ⁡ ( x ) x ⋅ y \log(x) x \cdot y log(x)x⋅y节点7运算: log ⁡ ( x ) x ⋅ y − sin ⁡ ( y ) \log(x) x \cdot y - \sin(y) log(x)x⋅y−sin(y) (这是最终的输出节点) 步骤3: 创建边 接着我们连接相应的边来形成有向图 从节点1到节点3表示 log ⁡ ( x ) \log(x) log(x) 的输入是 x x x从节点1到节点4表示 x ⋅ y x \cdot y x⋅y 的一个输入是 x x x从节点2到节点4表示 x ⋅ y x \cdot y x⋅y 的另一个输入是 y y y从节点2到节点5表示 sin ⁡ ( y ) \sin(y) sin(y) 的输入是 y y y从节点3和节点4到节点6表示他们的结果被加在一起从节点6和节点5到节点7表示前者的结果减去后者的结果来得到最终输出 步骤4: 执行前向传播 现在你可以执行前向传播来计算输出按照操作的顺序一步步前进直到达到输出节点。 步骤5: 可选执行反向传播 如果你还打算进行自动微分你可以实施反向传播算法来计算相对于 x x x 和 y y y 的偏导数。 代码实现 /// /// \brief The Variable class /// 自动微分 class Variable { public://保存值double value;//保存梯度double grad;//当前的梯度是否启用bool isEnableGrad;Variable(double v 0.0,bool requires_gradtrue,double g0.0) : value(v), isEnableGrad(requires_grad),grad(g){}std::functionvoid() backpropFunc;std::vectorstd::shared_ptrVariable parents;//设置求导函数void setBackprop(const std::functionvoid() func){backpropFunc func;}//添加组成当前节点的节点void addParent(const std::shared_ptrVariable parent){parents.push_back(parent);}//反向传播void backward(){if (backpropFunc)backpropFunc();for (auto parent : parents){parent-backward();}}};//加法 inline std::shared_ptrVariable operator(const std::shared_ptrVariable a, const std::shared_ptrVariable b) {auto result std::make_sharedVariable(a-value b-value);result-setBackprop([]() {if(a-isEnableGrad)a-grad result-grad;if (b-isEnableGrad)b-grad result-grad;});result-addParent(a);result-addParent(b);return result; } //减法 inline std::shared_ptrVariable operator-(const std::shared_ptrVariable a, const std::shared_ptrVariable b) {auto result std::make_sharedVariable(a-value - b-value);result-setBackprop([]() {if (a-isEnableGrad)a-grad result-grad;if (b-isEnableGrad)b-grad - result-grad;});result-addParent(a);result-addParent(b);return result; }//乘法 inline std::shared_ptrVariable operator*(const std::shared_ptrVariable a, const std::shared_ptrVariable b) {auto result std::make_sharedVariable(a-value * b-value);result-setBackprop([]() {if (a-isEnableGrad)a-grad b-value * result-grad;if (b-isEnableGrad)b-grad a-value * result-grad;});result-addParent(a);result-addParent(b);return result; } // 除法 inline std::shared_ptrVariable operator/(const std::shared_ptrVariable a, const std::shared_ptrVariable b) {if (b-value 0.0) {std::cerr Error: Division by zero! std::endl;exit(1);}auto result std::make_sharedVariable(a-value / b-value);result-setBackprop([]() {if (a-isEnableGrad)a-grad (1.0 / b-value) * result-grad;if (b-isEnableGrad)b-grad - (a-value / (b-value * b-value)) * result-grad;});result-addParent(a);result-addParent(b);return result; } // sin inline std::shared_ptrVariable sin(const std::shared_ptrVariable a) {auto result std::make_sharedVariable(std::sin(a-value));result-setBackprop([]() {if (a-isEnableGrad)a-grad std::cos(a-value) * result-grad;});result-addParent(a);return result; } // cos inline std::shared_ptrVariable cos(const std::shared_ptrVariable a) {auto result std::make_sharedVariable(std::cos(a-value));result-setBackprop([]() {if (a-isEnableGrad)a-grad - std::sin(a-value) * result-grad; // 注意这里是减号因为cos的导数是-sin});result-addParent(a);return result; }// log inline std::shared_ptrVariable log(const std::shared_ptrVariable a) {if (a-value 0.0) {std::cerr Error: Logarithm of non-positive number! std::endl;exit(1);}auto result std::make_sharedVariable(std::log(a-value));result-setBackprop([]() {if (a-isEnableGrad)a-grad (1.0 / a-value) * result-grad; // 导数为 1/x});result-addParent(a);return result; }// exp inline std::shared_ptrVariable exp(const std::shared_ptrVariable a) {auto result std::make_sharedVariable(std::exp(a-value));result-setBackprop([]() {if (a-isEnableGrad)a-grad std::exp(a-value) * result-grad; // 导数为 e^x});result-addParent(a);return result; }int main() {auto x std::make_sharedVariable(2.0); // 创建一个初值为2的变量xauto y std::make_sharedVariable(5.0,false); // false 不计算y的梯度auto g log(x) x * y - sin(y);g-grad 1.0; // df/df 1g-backward();std::cout df/dx x-grad std::endl;std::cout df/dy y-grad std::endl;return 0; }
http://www.dnsts.com.cn/news/239368.html

相关文章:

  • 深圳服饰网站建设网站做直播需要资质吗
  • 浙江建设技术职业学院网站资源网站模板
  • 云南做网站价格wordpress rss文件
  • c mvc 大型网站开发全球品牌网
  • 爱站网源码重庆网约车哪个平台最好
  • 公司网站建设支出计入崇左市住房和城乡建设局网站
  • 保险网站建设平台做阿里巴巴网站卖货咋样
  • 凡科做公司网站怎么收费淘宝天猫优惠券网站怎么做
  • 永嘉做网站网站系统安全性
  • 网站备案后怎么做军事新闻最新消息中国视频
  • 男生做污污的视频网站敬请期待前面一句
  • 新民个人网站建设优势网站建设技术教程
  • 工程信息网站谁做WordPress套
  • 注册企业网站wordpress点餐主题
  • 昆明网站建设高端定制网页设计实验报告分析与体会
  • 社区微网站建设方案ppt外贸营销型网站建站
  • 江苏招标网中标公告做搜狗网站优化
  • 中山品牌网站建设推广设计师关注的十大网站
  • 做网站卖多少钱一个wordpress宝塔伪静态
  • 网站建设任职要求上海网络维护服务
  • 做白酒网站网站用什么做内网穿透比较好
  • 网站建设求职具备什么怎么建公众号
  • 南京响应式网站建设网络维护协议范本
  • 番禺网站建设专家网络营销的推广方式都有哪些
  • 网站服务器空间大小php mysql开发的网站开发
  • 做网站为什么用php建设工程监理
  • 网站进度条源代码juqery-ui网站建设管理经验做法
  • 沈阳建设局网站市场推广计划怎么写
  • 网站页面设计要求网站备案号
  • 做二手房比较好的网站国家开发大学网站作业怎么做