- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
神经网络应该由若干神经元组成.
前面的每一个神经元都会给到一个参数,将传递的所有参数看作一个向量 \(\vec x\),那么此神经元的净输入为:
其中 \(\omega\) 称为权重向量.
这里认为 \(x\) 是行向量,而 \(\omega\) 是列向量.
神经元还有一个激活函数 \(f(\cdot)\):
称为函数的活性值 。
一般来说,我们使用 Logistic 函数,即 \(\sigma(x) = \frac 1 {1 + exp(-x)}\) 作为激活函数.
激活函数有很多很多种,一般来说要满足以下几点:
这里列举几种常见的函数.
指一类两端饱和的 S 型曲线.
饱和: \(\lim_\limits{x \to -\infty} f'(x) = 0\) 称为左饱和,\(\lim_\limits{x \to \infty} f'(x) = 0\) 称为右饱和。 同时满足则称为两端饱和.
常见的 Sigmoid 型函数有 Logistic 和 Tanh.
Logistic
函数其导数:
Tanh
函数其可以看作缩放平移后的 \(\sigma\),因为:
自然其导数:
实际上我们可以通过近似的方法去拟合这个函数,毕竟 \(e^x\) 也不是那么好算的.
Hard-Logistic
和 Hard-Tanh
函数或者利用 \(\min, \max\) 简化:
类似的:
也就是 Rectified Linear Unit,线性修正单元,定义为:
也就是 \({\rm ReLU}(x) = \max(x, 0)\) 。
当然,因为可能出现 死亡 ReLU 问题,所以一般有如下变形:
如果 \(\gamma = 0\) 则退化为 \(\rm ReLU\) 函数,如果 \(\gamma < 1\),那么也可以写为:
另一个变形是:
还有一个则是:
这是一种自控门函数:
网络结构分三种:
这里先讲述前馈网络.
这是一个前馈网络的示意图,其中第一层为输入层,最后一层为输出层.
而中间的那些层称为隐藏层。隐藏层可以有多个,而这里只画出了一个.
每一层有若干神经元,而两层间的神经元两两相连.
现在我们定义一些符号:
对于一组数据 \((\vec x, y)\),前馈神经网络通过如下算法进行传播:
参数学习可能略有点复杂,证明过程我懒得写成 \(\LaTeX\),这里就省略了.
我们利用反向传播算法进行学习,其步骤如下:
显然的是 \(\delta^{(L)} = a^{(L)} - y\) 。
经过一番神秘的推导,我们可以得到:
其中 \(\cdot\) 表示元素一一相乘.
而计算偏导数的公式也不难:
也就是参数更新方式为:
但是值得注意的是,一般我们都会将 \(W^{(l)}\) 的第一列作为 \(b^{(l)}\),也就是不分开,所以在代码实现上要好生注意! 。
这是吴恩达机器学习 ex4 的部分代码:
function [J grad] = nnCostFunction(nn_params, ...
input_layer_size, ...
hidden_layer_size, ...
num_labels, ...
X, y, lambda)
% Theta1 25 x 401
% Theta2 10 x 26
Theta1 = reshape(nn_params(1:hidden_layer_size * (input_layer_size + 1)), ...
hidden_layer_size, (input_layer_size + 1));
Theta2 = reshape(nn_params((1 + (hidden_layer_size * (input_layer_size + 1))):end), ...
num_labels, (hidden_layer_size + 1));
temp1 = Theta1;
temp2 = Theta2;
temp1(:, 1) = 0;
temp2(:, 1) = 0;
m = size(X, 1);
J = 0;
Theta1_grad = zeros(size(Theta1));
Theta2_grad = zeros(size(Theta2));
% forward propagation
A2 = sigmoid([ones(m, 1) X] * Theta1'); % m x 25
A3 = sigmoid([ones(m, 1) A2] * Theta2'); % m x 10
% caculate cost
Y = zeros(m, num_labels);
for i = 1:m
Y(i, y(i)) = 1;
end
J -= sum(sum( log(A3) .* Y + log(1 - A3) .* (1 - Y) ));
J += lambda / 2 * (sum(sum(temp1 .* temp1)) + sum(sum(temp2 .* temp2)));
J /= m;
% Back Propagation
D1 = zeros(size(Theta1));
D2 = zeros(size(Theta2));
for i = 1:m
a1 = X(i, :); % 1 x 400
a2 = A2(i, :); % 1 x 25
a3 = A3(i, :); % 1 x 10
y = Y(i, :); % 1 x 10
d3 = (a3 - y)'; % 10 x 1
d2 = (Theta2' * d3) .* [1 a2]' .* (1 - [1 a2])'; % 26 x 1
d2 = d2(2:end) ; % 25 x 1
D1 += d2 * [1 a1];
D2 += d3 * [1 a2];
end
Theta1_grad = (D1 + lambda * temp1) / m;
Theta2_grad = (D2 + lambda * temp2) / m;
% Unroll gradients
grad = [Theta1_grad(:) ; Theta2_grad(:)];
end
最后此篇关于机器学习笔记(3):神经网络初步的文章就讲到这里了,如果你想了解更多关于机器学习笔记(3):神经网络初步的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
简介 在上一篇文章《机器学习:神经网络构建(上)》中讨论了线性层、激活函数以及损失函数层的构建方式,本节中将进一步讨论网络构建方式,并完整的搭建一个简单的分类器网络。 目录 网络Netwo
简介 在本篇文章中,我们采用逻辑回归作为案例,探索神经网络的构建方式。文章详细阐述了神经网络中层结构的实现过程,并提供了线性层、激活函数以及损失函数的定义(实现方法)。 目录 背景介绍
简介 在前两篇文章中,我们详细探讨了如何利用采样数据来估计回归曲线。接下来,在本节中,我们将深入讨论如何处理分类问题。 章节安排 背景介绍 数学方法 程序实现 背景介绍 线
简介 在上一篇文章《机器学习:线性回归(上)》中讨论了二维数据下的线性回归及求解方法,本节中我们将进一步的将其推广至高维情形。 章节安排 背景介绍 最小二乘法 梯度下降法 程序
PyCaret是一个开源、低代码Python机器学习库,能够自动化机器学习工作流程。它是一个端到端的机器学习和模型管理工具,极大地加快了实验周期,提高了工作效率。PyCaret本质上是围绕几个机器学习
在我的研究进展中,我现在已经将寄生虫从图像中分离出来。寄生虫看起来像蠕虫。我希望 MATLAB 读取所有输入图像,查找类似深紫色图像的蠕虫,如果检测到,则给出检测到的答复。我尝试使用直方图比较,但我认
目前我正在尝试了解机器学习算法的工作方式,但我没有真正了解的一件事是预测标签的计算准确度与视觉混淆矩阵之间的明显差异。我会尽量解释清楚。 这是数据集的片段(这里你可以看到 9 个样本(在真实数据集中大
第一章 绪论 机器学习 : 致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。在计算机系统中, “经验” 通常以“数据“形式存在,因此,机器学习所研究的主要内容,是关于在计算
1. 算法原理(K-Nearest Neighbor) 本质是通过距离判断两个样本是否相似,如果距离够近就认为他们足够相似属于同一类别 找到离其最近的 k 个样本,并将这些样本称
前言 K-means是一种经典的无监督学习算法,用于对数据进行聚类。K-means算法将数据集视为具有n个特征的n维空间,并尝试通过最小化簇内平方误差的总和来将数据点划分为簇。本文将介绍K-m
目录 前言 介绍LightGBM LightGBM的背景和起源 L
前言 可以说掌握了机器学习,你就具备了与机器对话,充分利用机器为人类服务的能力。在人工智能时代,这将成为一项必备技能,就好比十年前你是编程大牛,二十年前你英语超好一样。因此,无论你是什么专业的
几个贯穿始终的概念 当我们把人类学习简单事物的过程抽象为几个阶段,再将这些阶段通过不同的方法具体化为代码,依靠通过计算机的基础能力-- 计算 。我们就可以让机器能够“学会”一些简单的事物。
1、选题背景 人脸识别技术是模式识别和计算机视觉领域最富挑战性的研究课题之一,也是近年来的研究热点,人脸性别识别作为人脸识别技术
每当我们在公有云或者私有云发布训练好的大数据模型,为了方便大家辨识、理解和运用,参照huggingface所制定的标准制作一个Model Card展示页,是种非常好的模型展示和组织形式。 下面就是一
2. 支持向量机 对偶优化 拉格朗日乘数法可用于解决带条件优化问题,其基本形式为: \[\begin{gather} \min_w f(w),\\ \mathrm{s.t.} \quad
我正在尝试运行以下代码: https://github.com/opencv/opencv/blob/master/samples/dnn/classification.cpp 我在这里找到所有经过预
我是机器学习新手。当我使用 scikit-learn 模块中的波士顿数据集练习具有默认参数的决策树回归模型时。 在此链接解决方案( How to Build a Decision tree Regre
我有用于训练的数据。当我将其输入神经网络时,该数据出现 3% 的错误。 我知道这些数据有一定的过度代表性 - 例如,第 5 类的示例大约是其他类的十分之一。 我的作业指出,我可以通过偏置训练数据(即删
我在 Python 的多类分类中使用 SVM 时遇到问题。事实上,问题在于性别分类(来自图像),其中训练数据集仅包含“y=1”或“ y=-1”作为类标签(二进制)。但是,在预测中,如果是男性,我必须预
我是一名优秀的程序员,十分优秀!