深度学习入门-数值计算
机器学习算法通常需要大量的数值计算。这通常是指通过迭代过程更新解的估计值来解决数学问题的算法,而不是通过解析过程推导出公式来提供正确解的方法。常见的操作包括优化(找到最小化或最大化函数值的参数)和线性方程组的求解。对数字计算机来说实数无法在有限内存下精确表示,因此仅仅是计算涉及实数的函数也是困难的。
上溢和下溢当大量级的数被近似为$\infty$或$-\infty$,进一步的计算将会导致这些异常值变成非数字,这称为上溢。
当接近0的数被四舍五入成0时,就会产生下溢。
因此在实际模型中,我们会避免将多个概率相乘,而转为求其对数(Log)。
病态条件数值分析中,一个问题的条件数是该数量在数值计算中的容易程度的衡量,也就是该问题的适定性。一个低条件数的问题称为良置的,而高条件数的问题称为病态(或者说非良置)的。条件数表征函数相对于输入的微小变化而变化的快慢程度。输入被轻微扰动而迅速改变的函数对于科学计算来说可能是有问题的,因为输入中的舍入误差可能导致输出的巨大变化。【这个暂未理解,仅做摘录】
基于梯度的优化方法大多数深度学习算法都涉及某种形式的优化。优化指的是改变 x 以最小化或最大化某 ...
深度学习入门-贝叶斯规则
通常,事件x在事件y(发生)的条件下的概率,与事件y在事件x(发生)的条件下的概率是不一样的。然而,这两者是有确定的关系的,贝叶斯定理就是这种关系的陈述。贝叶斯公式的一个用途在于通过已知的三个概率函数推出第四个。
数学表达贝叶斯规则的数学表达如下:
$P(x|y)=\frac{P(x)P(y|x)}{P(y)}$
这个公式的含义是x的后验概率是x的先验概率*与y的标准相似度。$\frac{P(y|x)}{P(y)}$称作标准相识度。
应用范例基于贝叶斯定理:即使100%的胰腺癌症患者都有某症状,而某人有同样的症状,绝对不代表该人有100%的概率得胰腺癌,还需要考虑先验概率,假设胰腺癌的发病率是十万分之一,而全球有同样症状的人有万分之一,则此人得胰腺癌的概率只有十分之一,90%的可能是是假阳性。
END
深度学习入门-常用函数
以下是一些经常在深度学习中用到的函数。
logistic sigmoid 函数logistic sigmoi函数的数学表达式为:$\phi(x)=\frac{1}{1+exp(-x)}$
函数的图像为:
可以看出$\phi(x)$的值必然落在(0,1)之间,这就可以很好的用来生成伯努利分布的$\phi$。当x的绝对值非常大时,函数的变化变得不敏感,这称为饱和现象。
softplus 函数softplus函数的数学表达式为:$\zeta(x)=log(1+exp(x))$
softplus函数的图像为:
softplus函数常用来生成正态分布的方差的倒数$\beta=\frac{1}{\sigma^2}$。因为softplus函数的值正好位于(0,$\infty$)。
softmax 函数在数学,尤其是概率论和相关领域中,Softmax函数,或称归一化指数函数,是逻辑函数的一种推广。它能将一个含任意实数的K维向量$\textrm{z}$“压缩”到另一个K维实向量$\sigma(\textrm{z})$中,使得每一个元素的范围都在${0,1}$之间,并且 ...
深度学习入门-常用概率分布
一些简单的概率分布在机器学习中出现的频率非常高。下面是一些代表。
伯努利分布 Bernoulli distribution伯努利分布就是我们常见的0-1分布,它的随机变量是离散的,而且只能取0和1。假设$\phi$是取到1的概率。那么伯努利分布具备的性质可以描述成以下的等式:
$P(\textrm{x}=1)=\phi$
$P(\textrm{x}=0)=1-\phi$
$P(\textrm{x}=x)=\phi^x(1-\phi)^{1-x}$
$\mathbb{E}_\textrm{x}[\textrm{x}]=\phi$
$Var_\textrm{x}[\textrm{x}]=\phi(1-\phi)$
多项分布 Multinoulli distribution多项分布也叫范畴分布,他是伯努利分布的一般化推广。如果你在做一个试验,它的结果要么成功要么失败,那么它就是一个伯努利分布。但是考虑这个试验的结果可能取到N个值。那每次试验的结果就可以记为一个N维的向量,只有此次试验的结果对应的维度记为1,其 ...
深度学习入门-概率论基础
概率论是深度学习最核心的数学工具之一。本文是涉深度学习的概率论方面知识的回顾。
为什么要使用概率深度学习有别于传统的计算机场景,是在未能完全观测或不具备全部信息的前提下去猜测答案。当精确会带来复杂的时候,简单但是可能不确定有时候更有用。
但事实上机器学习领域的概率有别于我们在大学里学到的数学概率。之前我们理解的概率是事件重复发生足够多次的时候,某个结果出现的比例。但在机器学习领域,比如说去预测一个患者罹患肺炎的概率,这个时候你无法让同一个患者重复足够多次得到最终确诊为肺炎的比例。这个时候所说的概率应该称之为信任度。1那么肯定是肺炎,0肯定不是肺炎。所以之前的概率可称为频率派概率,后者称为贝叶斯概率。
所以对机器学习来说,概率论是一套工具:可以在给定一套命题的似然后,计算其他命题为真的似然。
随机变量随机变量$\textrm{x}$是可以随机取不同值的变量。$x_1$,$x_2$就是他可能取到的值。如果随机变量是向量,那么可以记为$\bf x$。
概率分布概率分布是指随机变量$x$取到某个状态值$x_1$的可能性大小。对于离散随机变量和连续随机变量有不同的描述方式。
离散型随机变量和 ...
SQL Server 增量同步方案探索
这是我早期写的一篇文章,搬运过来归档。现在增量同步已经有了发布订阅、alwayson、cdc等多种选择。
1. 背景SQL Server增量同步是数据中心建设的一个关键点。可用的方案方剑总在[大话数据库增量备份]一文中有过系统的总结。本次讨论过程中我提出了一个新的方案,即基于SQL Server LDF 日志的增量同步。端午节期间针对这个方案及其他几个可尝试的方案进行了探索。
2.基于SQL Server LDF日志抓取增量内容并同步的方案探索2.1 核心思路使用fn_dblog函数获取事务日志,解析日志,抓取在特定表上的INSERT,UPDATE,DELETE操作,将事务在同步库中重现
2.2 步骤# fn_dblog是一个未被官方文档记载的内置函数,官方不建议常规用户使用,他的使用方法没有系统介绍,必须依赖官方博客的只言片语,以及前人的探索。SELECT * FROM fn_dblog(NULL, NULL) # 参数是时间范围# 观看返回值,发现很多无关的日志内容,然后发现有AllocUnitId字段,查阅有关资料得知这是数据库对象的实例ID,这个实例ID不是一成不变的,会伴 ...
事务复制对SQLServer的影响
它使用SQL代理日志读取器作业来从发布数据库的事务日志中收集已提交的事务。这意味着在日志记录被读取之前不能清除日志。如果日志读取器代理出现问题,则日志可能意外增长。在大量的OLTP操作时,日志读取器代理的读和业务的写可能产生争用,这取决于你的IO的性能。
复制第一次初始化或者长时间停用后,再启用,会传输过多的事务日志,第一次生成快照时,会锁表。在此期间数据库会表现出响应延迟(其实还是日志瓶颈)。建议停用超过6小时,则使用最新备份还原到复制库后再进行同步。
连续运行代理的性能开销小于频繁调度
在分发服务器上 设置 –MaxCmdsInTran 能提高事务复制的性能,–SubscriptionStreams 能提高复制的吞吐量, -CommitBatchSize用于设置分发服务器上一次提交行数,网络越不靠谱,这个值就需要设置的越小,但越小则分发服务器上的开销越大。
发布服务器上的**-ReadBatchSize**参数用于指定一次读取的事务数量,默认是500个,如果复制的表较多,则这个值要设小一点,如果复制的表较少,则这个值要设大一点。(即,有效日志是不是稀疏的)
发布服务器 ...
jupyter自动代码补全
jupyter notebook 用来写python代码蛮舒服的,唯一的缺点就是代码提示需要主动按tab键,跟pycharm比起来太累了。幸好通过插件Hinterland能解决这个问题,下面是具体的步骤。
操作步骤
进入命令行环境。我使用的是conda。有两种方式进入命令行。
方法1:通过anconda navigator界面,选择environments,选择对应环境名,选择open terminal
方法2:直接使用cmd或者terminal等终端进入命令行。激活你想要配置代码补全的环境(如果是默认环境不用激活)
# 假设环境名为 tensorflow# linux激活环境 source activate tensorflow# windows 激活环境activate tensorflow
安装nbextensions
pip install jupyter_contrib_nbextensionsjupyter contrib nbextension install --user
安装nbextensions_configurator
pip install ju ...
JPA调用SQL Server存储过程获得返回值
SQL Server的存储过程返回值的方式跟Oracle有蛮大的区别,想通过JPA去获取存储过程的返回值,需要特殊的实现。代码如下。
@Autowiredprivate EntityManager entityManager; ... ....StoredProcedureQuery query = entityManager .createStoredProcedureQuery("USP_GET_SJJ") .registerStoredProcedureParameter("jktablename", String.class, ParameterMode.IN) .registerStoredProcedureParameter("xhstr", String.class, ParameterMode.IN) .registerStoredProcedureParameter("retu ...
使用私有gitlab搭建gitbook持续集成
gitbook是一套文档/书籍很好的解决方案,我这里用他来发布团队的一些公有规范。gitlab是我们在用的一套git私仓。以下是具体的操作步骤。
安装node.jswget https://nodejs.org/dist/latest-v6.x/node-v6.12.3.tar.gztar -xf node-v6.12.3.tar.gzcd node-v6.12.3./configuresudo makesudo make install
安装gitbook-clisudo npm install -g gitbook-cli
创建git project 并注册cli直接在gitlab中创建一个project,然后进入project的settings界面CI/CD settings下的Runners settings界面找到注册令牌。如果没安装过gitlab runner,还需要先安装gitlab runner,可以参照我之前的一篇文章中的第三步,第四步。然后为该project注册cli
sudo gitlab-runner register
这里需要注 ...