自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(237)
  • 收藏
  • 关注

原创 交叉熵损失函数与激活函数汇总

MSE 函数对于一个输出范围是的数来说是凸的(标准的u型),而分类问题通常会接sigmoid或softmax,它的输出范围为。会导致损失函数变成非凸函数,有多个极值点。而CE对参数的偏导没有受到激活函数导数的影响,保证了梯度的稳定。即A和B的KL散度=A的熵-AB的交叉熵,在机器学习中,训练数据的分布是固定的,因此最大化相对熵(KL散度)等价于最小化交叉熵。对均方误差损失函数而言,要得到稳定的梯度,输出不能经过激活函数,这样的情况只有线性回归,所以SE较适合做回归问题。1. 从最优化的角度。

2024-03-25 14:30:34 168

原创 softmax汇总

带温度参数的softmax:带温度参数的softmax是一种软化的softmax形式,它也以e为底数,但采用了一个额外的温度参数T。温度参数T越大,得到的概率分布会更加平滑,而T越小,则会产生更大的差异性。缺点:但是也带来了缺点,当 �� 值非常大的话,计算得到的数值也会变的非常大,数值可能会溢出。优点:经过使用指数形式的Softmax函数能够将差距大的数值距离拉的更大。

2024-03-12 17:00:47 185

原创 TFIDF、BM25、编辑距离、倒排索引

TF刻画了词语t对某篇文档的重要性,IDF刻画了词语t对整个文档集的重要性。

2023-11-30 16:31:36 198

原创 交叉熵损失函数

为啥不使用均方误差损失函数?主要原因是在分类问题中,使用sigmoid/softmx得到概率,配合MSE损失函数时,采用梯度下降法进行学习时,会出现模型一开始训练时,学习速率非常慢的情况交叉熵函数是凸函数,求导时能够得到全局最优值。信息量:熵: 相对熵: 又称KL散度(Kullback-Leibler (KL) divergence),用于衡量对于同一个随机变量x的两个单独的概率分布P(x)和Q(x)之间的差异。相对熵不具有对称性、不具有负数性将上面相对熵KL散度修改格式如下:KL散度 = 信息熵 - 交叉

2022-06-27 16:11:26 317 1

原创 模型蒸馏1

两种蒸馏形式:模型蒸馏 (模型压缩,模型不同,特征相同) 优势特征蒸馏(大模型使用全量特征,适用于模型相同,特征不同)俩种训练方式:pre-train是预先训练teacher网络,然后再训练student网络;co-train则是通过上述介绍的损失对teacher网络和student网络进行联合训练,co-train方式往往训练速度更快,但所需的GPU资源也会更多。蒸馏时的softmax比之前的softmax多了一个参数T(temperature),T越大产生的概率分布越平滑 两种蒸馏的目标函数:1:只使用

2022-06-21 18:23:56 3522

原创 aibert

对bert的三大改造《1词嵌入向量参数的因式分解O(V * H) to O(V * E + E * H) 参数量少了几十倍《2跨层参数共享参数共享能显著减少参数。共享可以分为全连接层、注意力层的参数共享;注意力层的参数对效果的减弱影响小一点。《3段落连续性任务。正例,使用从一个文档中连续的两个文本段落;负例,使用从一个文档中连续的两个文本段落,但位置调换了其他改进变化:《1去掉drpout《2为加快训练速度,使用LAMB做为优化器《3使用n-gram(uni-gram,bi-gram, tri-gram)来

2022-06-17 18:35:00 333

原创 CRF命名实体识别

CRF 层可以向最终的预测标签添加一些约束,以确保它们是有效的。这些约束可以由 CRF 层在训练过程中从训练数据集自动学习。CRF损失函数:Path Score Real = Emission score(发射分数) + Transition score(转移分数)Emission score:神经网络输出的各个Tag的置信度;Transition score:CRF层中各个Tag之前的转移概率;Preal path=escore当只使用CRF做NER的时候规则都是人为制...

2022-04-15 18:10:44 2324

原创 HMM命名实体识别

齐次马尔可夫链假设观测独立性假设Y是隐藏状态序列:比如标注序列X是观测状态序列:比如字符序列三个元素:初始状态概率:第一个位置为每个标注标签的概率矩阵状态转移矩阵:上一位置标签到下一位置标签的转移概率矩阵MXM发射矩阵:从每一个标签到字典中每个字符的映射矩阵MXN(M为Y的标签个数,N为X的字典字符个数)实际计算时,也是根据训练数据中频率==概率(最大似然计算)维特比算法核心:在每一时刻,计算当前时刻落在每种隐状态的最大概率,并记录这个最大概率是从前一时刻哪个隐状态转..

2022-04-14 11:02:53 475

原创 膨胀卷积IDCNN

(a)图中经由原始感受域按步长为1向外扩散,得到8个1x1的区域构成新的感受域,大小为3x3;(b)图中经过步长为2的扩散,上一步3x3的感受域扩展为为7x7;(c)图中经步长为4的扩散,原7x7的感受域扩大为15x15的感受域。每一层的参数数量是相互独立的。感受域呈指数扩大,但参数数量呈线性增加。...

2022-04-06 19:29:26 290

原创 tensorflowAPI杂技

数据占位符self.input_x = tf.placeholder(tf.int32, [None, self.config.seq_length], name='input_x')self.keep_prob = tf.placeholder(tf.float32, name='keep_prob')使用CPU设备with tf.device('/cpu:0'): embedding = tf.get_variable('embedding', [self.config.voca...

2022-03-24 14:11:04 1550 1

原创 CRF条件随机场

<1CRF可以定义数量更多,种类更丰富的特征函数。HMM模型具有天然具有局部性,就是说,在HMM模型中,当前的单词只依赖于当前的标签,当前的标签只依赖于前一个标签。这样的局部性限制了HMM只能定义相应类型的特征函数,我们在上面也看到了。但是CRF却可以着眼于整个句子s定义更具有全局性的特征函数,如这个特征函数:(以问号结尾时,第一个单词必须为动词)<2:但在CRF中,每个特征函数的权重可以是任意值,没有这些限制。...

2022-03-22 16:18:51 154

原创 HMM隐马尔科夫

一般将一个隐马尔可夫模型记为:【&,A,B】初始状态概率&、隐藏状态之间的转移概率A隐藏状态到可观察状态的发射矩阵B第一个问题:评估三个盒子甲乙丙、盒子里有红黄蓝三种颜色的球,知道第一次取到三个盒子的概率&,盒子之间转移概率A、从每个盒子取到不同颜色球的概率B、求三次取球为红、红、蓝的概率第二个问题:解码三个盒子甲乙丙、盒子里有红黄蓝三种颜色的球,知道第一次取到三个盒子的概率&,盒子之间转移概率A、从每个盒子取到不同颜色球的概率B、且三次取球为红、

2022-03-17 17:58:37 619

原创 bert总结

词嵌入张量: word embeddings语句分块张量: segmentation embeddings位置编码张量: position embeddings最终的embedding向量是将上述的3个向量直接做加和的结果随机的抽取15%的token作为即将参与mask的对象:80%替换为MASK、10%随机替换、10%不变...

2022-02-22 20:33:09 701

原创 激活函数总结

激活函数就是给神经网络引入非线性的,以此来模拟复杂的非线性关系sigmoid容易出现梯度消失:导数接近为0.连乘会为0 函数输出并不是零中心化: Sigmoid函数的输出值恒大于0,这会导致模型训练的收敛速度变慢,训练深度学习网络尽量使用zero-centered数据 幂运算相对来讲比较耗时软饱和:导数极限情况下为0硬饱和:导数在确定数值为0梯度消失问题至今仍然存在,但被新的优化方法有效缓解了,例如DBN中的分层预训练,Batch Normalization的逐层归一化,Xavie

2022-02-22 19:44:00 728

原创 LSTM原理再议

梯度爆炸如果你截断或挤压渐变,则可以轻松解决此问题。消失的梯度  当梯度的值太小并且模型停止学习或因此而过长时,比梯度爆炸更难以解决。幸运的是,它是通过Sepp Hochreiter和Juergen Schmidhuber提出的LSTM概念解决的​​​​​​长短期记忆神经网络(LSTM)介绍以及简单应用分析 - 舞动的心 - 博客园LSTM神经网络输入输出究竟是怎样的? - 知乎简单理解LSTM神经网络_喜欢打酱油的老鸟-CSDN博客_lstm神经网络简单理解LSTM神经网络

2022-02-11 21:58:25 574

原创 模型部署站位

基于java:Java调用Keras、Tensorflow模型 | 青春回忆录基于flask:Serving a model with Flask基于Tensorflow Serving在Tensorflow Serving上部署基于LSTM的文本分类模型 - 简书

2022-02-11 15:18:42 771

原创 CNN文本分类

数据集:搜狗实验室(Sogou Labs)输入层(词嵌入层):《1静态初始化:word2vec初始化后就不参与模型训练《2非静态初始化:word2vec初始化后参与模型训练,微调《3:多通道:两种词向量初始化方式来搭建两个通道《4:随机初始化:随机初始化参与模型训练,经过BP的方向更新输入层的各个词汇对应的词向量。卷积层:核一般取2-8池化层:池化层除了最大值池化以外,也有论文讨论过 Top K最大值池化,即选取每个卷积层输出的Top k个最大值做为池化层的输出。TextCN

2022-02-11 15:17:00 552

原创 交叉熵损失函数

交叉熵作为损失函数还有一个好处是使用sigmoid函数在梯度下降时能避免均方误差损失函数学习速率降低的问题,因为学习速率可以被输出的误差所控制交叉熵损失函数原理详解_Cigar-CSDN博客_交叉熵损失函数损失函数:交叉熵详解 - 知乎损失函数|交叉熵损失函数 - 知乎交叉熵损失函数 - 一只小白白 - 博客园交叉熵损失函数 - 简书交叉熵--损失函数 - 扰扰 - 博客园交叉熵损失函数详解 - 程序员大本营...

2022-02-09 20:56:08 409

原创 215: 数组中的第K个最大元素(快速排序、堆排序、选择排序、冒泡排序、计数排序)

1:直观思路,排序后找 public int findKthLargest(int[] nums, int k) { Arrays.sort(nums); return nums[nums.length-k]; }2:利用大根堆nlog(k),亲测没排序快? public int findKthLargest(int[] nums, int k) { PriorityQueue<Integer> heap =

2022-02-06 11:39:42 499

原创 232:用栈实现队列

1:s1用来保证push的顺序,和empty操作s2用来保证pop、peek操作 Stack<Integer> s1 =new Stack<>();//push、empty Stack<Integer> s2 =new Stack<>();//pop、peek public MyQueue() { } public void push(int x) { s1.push(x); }

2022-02-06 11:15:03 182

原创 20:有效括号

借助Stack,如果为{【(入栈,如果为}】)出栈,但要判断栈是否为空,以及对应字符匹配 public boolean isValid(String s) { Stack<Character> ss =new Stack<>(); for(int i=0;i<s.length();i++){ if('('==s.charAt(i)||'{'==s.charAt(i)||'['==s.charAt(i)){

2022-02-05 16:54:48 326

原创 2:两数之和,两个链表相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。第一次遍历:相加,val大于10了,当其中一个为0时,赋值为0相加第二次遍历:把val大于10的处理了,存在进位为null的情况,此时赋值为1 public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode l3 =new ListNode(l1.val+l2.val);

2022-02-05 16:34:14 259

原创 19:删除链表倒数第K个节点

1:借助两个指针,让一个先跑n+1步,由于存在删除完为null的情况,所以先在头节点加一个0节点,是其为0---》null的情况,另外while循环不要判断next,存在null.next情况 public ListNode removeNthFromEnd(ListNode head, int n) { ListNode dump = new ListNode(0); dump.next=head; ListNode first = dump;

2022-02-05 13:35:01 514

原创 206反转链表

1:递归方法1--》2--》3 到 3--》2--》1返回末尾3节点,3节点next置为2,2节点next置为null;2节点next置为1,1节点next置为null public ListNode reverseList(ListNode head){ if(head==null||head.next==null){ return head; } ListNode p =reverseList(head.next);

2022-02-05 10:50:03 159

原创 春节回家,若有所思

2022励志打工皇帝

2022-02-04 10:06:30 77

原创 树的层次、前序、中序、后序遍历

1:层次遍历核心思想:借助一个队列存储节点,先把头节点放进去,输出当前节点值的同时,把当前节点的左右节点按顺序送进队列,只要队列不为空,就按先进先出弹出对应当前节点 public static void LaywerTraversal(TreeNode root){ if(root==null) return; LinkedList<TreeNode> list = new LinkedList<TreeNode>();

2021-08-14 16:51:22 231

原创 38:二叉树的深度

输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。示例1输入复制{1,2,3,4,5,#,6,#,#,7}返回值复制4第一种解法:函数递归加1 public int TreeDepth(TreeNode root) { if(root == null){ return 0; }else{ return 1+M

2021-02-21 21:32:50 52

原创 12数值的整数次

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0示例1输入复制2,3返回值复制8.00000考虑负数的存在第一种解法:无脑逻辑匹配就好了 public double Power(double base, int exponent) { if(exponent==0){ return 1.0; .

2021-02-21 21:03:18 75

原创 11:二进制中1的个数

负数用32位的补码表示正数:原码==反码==补码负数:反码:原码符号位不变,其余位取反;补码:反码加1输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。示例1输入复制10返回值复制2第一种流氓解法借助Integer.toBinaryString(n)转换为二进制字符串 public int NumberOf1(int n) { //负数用补码表示// 1、首先求出负数的原码,如-8的原码...

2021-02-21 20:47:48 261

原创 44 :翻转单词顺序列

输入复制"nowcoder. a am I"返回值复制"I am a nowcoder."第一种解法:借助split分离句子,存进一个List里,然后翻转拼接为新的字符串 public String ReverseSentence(String str) { ArrayList<String> al =new ArrayList<>(); for(String s:str.split(" ")){

2021-02-19 21:01:57 67

原创 数组中次数出现超过一半的数字

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。第一种解法双层for循环遍历 public int MoreThanHalfNum_Solution(int [] array) { for(int i=0;i<array.length;i++){ int num=1;

2021-02-19 19:07:24 56

原创 51:构建乘积数组

给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];)对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。第一种解法双层for遍历呗 public int[] multip

2021-02-18 12:03:53 48

原创 42:和为S的两个数字

题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。返回值描述:对应每个测试案例,输出两个数,小的先输出。第一种解法双层for循环遍历保存最小的呗 public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer> result = new Ar

2021-02-18 10:40:11 75

原创 11 中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1.

public class Solution { public int FirstNotRepeatingChar(String str) { for(int i=0;i<str.length();i++){ boolean flag=false; for(int j=0;j<str.length();j++){...

2019-11-25 16:23:13 294

原创 10: 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字

//num1,num2分别为长度为1的数组。传出参数//将num1[0],num2[0]设置为返回结果public class Solution { public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) { int num=0; for(int i=0;i<arr...

2019-11-25 15:45:15 166

原创 9:例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和

public class Solution { public int FindGreatestSumOfSubArray(int[] array) { int sum=array[0]; for(int i=1;i<=array.length;i++){//表示子数组长度 for(int j=0;j<=array.len...

2019-11-25 15:12:28 198

原创 8:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)

public class Solution { public int JumpFloor(int target) { if(target==1) return 1; if(target==2) return 2; int sum=2; if(target>2){ ...

2019-11-24 23:48:24 202

原创 6:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转

public class Solution { public int minNumberInRotateArray(int [] array) { int min=array[0]; for(int i=1;i<array.length;i++){ if(array[i]<min) min...

2019-11-24 23:30:12 212

原创 7:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。

public class Solution { public int Fibonacci(int n) { if(n==0) return 0; if(n==1) return 1; int sum=0; if(n>=2){ sum+=Fibona...

2019-11-24 22:59:44 834

原创 3:输入一个链表,,按链表从尾到头的顺序返回一个Array List。

/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }* }**/import java.util.ArrayList;import...

2019-11-24 22:40:36 76

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除