AutoEncoder 学习笔记
AutoEncoder 学习笔记
前言
AutoEncoder 作为神经网络里的一类模型,采用无监督学习的方式对高维数据进行特征提取和特征表示,其目的是重构输入(最小化输入和输出之间的差异),而不是在给定输入的情况下预测目标值。
AutoEncoder 简介
上面这张图很好的描述了 AutoEncoder 的工作原理,首先是一个数据输入,它可以是图片或是一串序列,就像上图描述的一样,一幅图片经过一个 Encoder 网络之后,得到了 Compressed representation ,也就是我们所谓的这个图像的「特征」,之后将得到的「特征」再次输入到 Decoder 网络中,获得图像的输出,将「特征」还原成了图片。
我们可以假设图中的网络是这样的,输入经过全连接层得到 Feature 之后再次进入全连接层,得到最后的输出。
可以预见的是,我们的通过这个网络得到的输出必然是有「损失」的,因为我们是经过「压缩」图像,然后再「还原」图像,许多的细节在这个过程中丢失了。
和许多网络一样,我们这么做的目的无非是为了提取特征。
AutoEncoder 模型实现(PyTorch)
下面我们通过 ...
梯度下降法学习笔记
梯度下降法学习笔记
前言
梯度下降法是一个经典的优化算法,在机器学习领域非常常见,很多机器学习算法最后都归结为求解最优化问题。在各种最优化算法中,梯度下降法是最简单、最常见的一种,在深度学习的训练中被广为使用。
梯度下降法(GD)
直观解释
通俗来说,梯度就是表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在当前位置的导数。
讲到梯度下降法时,往往都会有这么一个例子:想象你站在山顶,现在你想以最快的速度下山,那么你肯定会选择最陡的路下山,走到一个位置,同样继续向着当前位置最陡峭的位置下山。简单来说,这就是所谓的梯度下降法。
但是你可能也想到了,这样一步步的走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山峰低处。
梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。
理论推导
“沿着梯度的反方向(坡度最陡)”是我们日常经验得到的,其本质的原因到底是什么呢?为什么局部下降最快的方向就是梯度的负方向呢?
这里直接给出梯度下降算法的公式:
θ=θ0−η⋅∇f ...
为什么局部下降最快的方向就是梯度的负方向?
原文地址: https://blog.csdn.net/red_stone1/article/details/80212814
为什么局部下降最快的方向就是梯度的负方向?
什么是梯度?
对于梯度下降算法(Gradient Descent Algorithm),我们都已经很熟悉了。无论是在线性回归(Linear Regression)、逻辑回归(Logistic Regression)还是神经网络(Neural Network)等等,都会用到梯度下降算法。我们先来看一下梯度下降算法的直观解释:
假设我们位于黄山的某个山腰处,山势连绵不绝,不知道怎么下山。于是决定走一步算一步,也就是每次沿着当前位置最陡峭最易下山的方向前进一小步,然后继续沿下一个位置最陡方向前进一小步。这样一步一步走下去,一直走到觉得我们已经到了山脚。这里的下山最陡的方向就是梯度的负方向。
首先理解什么是梯度?通俗来说,梯度就是表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在当前位置的导数。
∇=df(θ)dθ\nabla = \frac{df(\theta)}{d\theta}
∇=dθdf(θ)
上式中 ...
摩尔投票法学习笔记
摩尔投票法学习笔记
博耶-摩尔多数投票算法(英语:Boyer–Moore majority vote algorithm),中文常作多数投票算法、摩尔投票算法等,是一种用来寻找一组元素中占多数元素的常数空间级时间复杂度算法。这一算法由罗伯特·S·博耶和 J·斯特罗瑟·摩尔在 1981 年发表,也是处理数据流的一种典型算法。
简介
首先我们给出背景:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
这个问题简单来说就是求众数的问题,一个简单的解决办法是使用哈希表记录元素出现的次数,然后遍历哈希表寻找满足条件的元素,时间复杂度为 O(n)、空间复杂度为 O(n)。然而我们希望找到一种时间复杂度为 O(n)、空间复杂度为 O(1) 的算法,也就是下面要讲的摩尔投票法。
算法思想
摩尔投票法的基本思想:在集合中寻找可能存在的多数元素,这一元素在输入的序列重复出现并占到了序列元素的一半以上;在第一遍遍历之后应该再进行一个遍历以统计第一次算法遍历的结果出现次数,确定其是否为众数;如果一个序列中没有占到多数的元素,那么第一次的结果就可能 ...
Understanding LSTM Networks
翻译原文: https://blog.csdn.net/yujianmin1990/article/details/78826506
英文原文: http://colah.github.io/posts/2015-08-Understanding-LSTMs/
Understanding LSTM Networks
Recurrent Neural Network
人们从不会随意地开始自己的思考,当你在读这篇博文的时候,你根据之前所读的文字来理解现在每个词。并且,你也不会将前面的内容都丢掉,然后从新开始理解现在的内容,人的思路是具有延续性的。
传统的神经网络是没法做到上述事情的,这是一个很大的缺陷。举个栗子,假设你想要对电影里的某个时间点正在发生什么事情做判断。对传统神经网络来说,无法使用之前的发生的事情来推断后续发生的事情。
循环神经网络则可以解决这类问题,这种网络带有自循环结构,使得信息可以保存延续到下个时刻。
在上图中,A + 循环构成一簇网络集合,A 的输入输出分别为 xtx_txt 和 hth_tht。其中 hth_tht 又作为 A 的输入。该循环允许信息从本网络 ...
OCSVM 学习笔记
OCSVM 学习笔记
前言
OCSVM(OneClass SVM) 算法是一种经典的异常检测算法,基本原理与 SVM 类似,与 SVM 关注的二分类问题不同的是,就像它的名字 OneClass SVM 那样,OCSVM 只有一个分类,这也正是异常检测所需要的,我们不关注那些异常的数据点。
如果你不了解 SVM 可以点击这里: 支持向量机(SVM)学习笔记
OCSVM 简介
Our strategy is to map the data into the feature space corresponding to the kernel, and to separate them from the origin with maximum margin.
OCSVM 的基本思想是: 将数据映射到与内核相对应的特征空间,在数据与原点间构建超平面,并且最大化超平面到零点的距离
类似的,我们可以得到最优化问题的目标函数和优化条件:
minw∈F,ξ∈Rn,ρ∈R12∥w∥2+1vn∑i=1nξi−ρs.t.(w⋅Φ(xi))≥ρ−ξi,ξi≥0\begin{aligned}
&\m ...
孤立森林学习笔记
孤立森林学习笔记
前言
「孤立森林」是一种常用于检测异常数据的算法,它具有线性时间复杂度以及较优的性能。作为一种「无监督」的算法,它在深度学习泛滥的今天,仍有着较好的表现。
算法简介
separating an instance from the rest of the instances
作为一种异常检测算法,我们希望的就是在一些正常的数据中,找到那些异常值。
可以预见的是,我们想要找到的这些异常数据点在某种程度上应该是「孤立的」,否则大量聚集的孤立点本身就不能称之为孤立,而应该是属于正常值,异常点本身就是 「few and different」,这也正是算法实现的基础。
回到算法本身,孤立森林的基本思想也很简单:不断地对一个数据集进行随机二分,直到所有数据点都变成孤立的,或者数到达了指定高度。
In a data-induced random tree, partitioning of instances are repeated recursively until all instances are isolated.
你可以把他理解成一颗二叉树,数据经过不断划分,最后每 ...
SQL 多表联查学习笔记
SQL 多表联查学习笔记
前言
在操作数据库时,面对一张表时往往没什么太大问题,但实际上大多数的查询需要涉及到多张表,进行多表联查;本文主要记录了本人在学习 SQL 多表联查的一些操作。
准备工作
在开始之前,我们准备了两张表,作为下面操作的对象。
学生信息表
id
学号
姓名
性别
年龄
1
210001
A
女
18
2
210002
B
男
18
3
210003
C
男
17
4
210004
D
女
19
5
210005
E
女
17
6
210006
F
男
18
专业班级表
id
学号
专业
班级
1
210001
数学
数 1
2
210003
计算机
计 1
3
210004
软件工程
软 2
4
210005
计算机
计 3
5
210007
物理
物 1
6
210008
英语
英 2
内连接(INNER JOIN)
使用场景:获取两个表中指定字段满足匹配关系的记录
1234SELECT <select_list>FROM Table_A AINNER JOIN Tabl ...
PyTorch 学习笔记
PyTorch 学习笔记
前言
PyTorch 是一个基于 python 的科学计算包,主要针对两类人群:
作为 NumPy 的替代品,可以利用 GPU 的性能进行计算
作为一个高灵活性、速度快的深度学习平台
安装 pytorch
你可以登录 官方网站 选择你想要的安装方式,然后 根据对应的安装命令安装即可。
有几点需要注意:
PyTorch 对应的 Python 包名为 torch 而非 pytorch
若需使用 GPU 版本的 PyTorch, 需要先配置英伟达显卡驱动,再安装 PyTorch
PS: 为了方便最好是将 conda 和 pip 的软件源修改成内地源,这样的话,使用 conda 或者 pip 安装软件速度会快很多,你可以点击 这里 了解如何对 conda 和 pip 进行换源。
PPS: 如果只是为了学习,没有 N 卡,或者说显卡的显存较小,可以只安装 CPU 版本的 torch,对于数据集较小、规模不大的神经网络还是 ok 的。当然如果你想要 GPU 加速,安装 GPU 版本,那么就需要安装 cuda 和 cudnn,你可以点击 这里 了解更加具体的操作。 ...
What the f*ck Python!
原文地址:https://github.com/leisurelicht/wtfpython-cn
项目地址:https://github.com/satwikkansal/wtfpython
What the f*ck Python!
前言
一些有趣且鲜为人知的 Python 特性.
Python, 是一个设计优美的解释型高级语言, 它提供了很多能让程序员感到舒适的功能特性. 但有的时候, Python 的一些输出结果对于初学者来说似乎并不是那么一目了然.
这个有趣的项目意在收集 Python 中那些难以理解和反人类直觉的例子以及鲜为人知的功能特性, 并尝试讨论这些现象背后真正的原理!
虽然下面的有些例子并不一定会让你觉得 WTFs, 但它们依然有可能会告诉你一些你所不知道的 Python 有趣特性. 我觉得这是一种学习编程语言内部原理的好办法, 而且我相信你也会从中获得乐趣!
如果您是一位经验比较丰富的 Python 程序员, 你可以尝试挑战看是否能一次就找到例子的正确答案. 你可能对其中的一些例子已经比较熟悉了, 那这也许能唤起你当年踩这些坑时的甜蜜回忆 😅
PS: 如果你不 ...