我正在调试我的约束随机梯度下降算法,文章http://research.microsoft.com/pubs/192769/tricks-2012.pdf建议使用有限差分检查梯度。我添加了惩罚函数,但模型不再收敛,所以我想按照文章中的建议检查我的渐变。
所以我可以选择一个例子来计算这个例子的丢失,但是我的权重向量包含~4000个特征,所以我得到了一个很多偏导数的向量作为我的渐变而丢失是一个整数,所以它不是可以计算Q(z,w)+δg。我是否必须计算w的单个特征的损失?这是“现在的W”的意思吗?
答案 0 :(得分:0)
该出版物中的等式看起来很奇怪,因为它没有仔细描述。为了检查渐变,您通常会检查“猜测”渐变i
和之间的差异
数值梯度,( Q(z, w + delta*e_i) - Q(z, w) ) / ( delta )
维度等于
delta
足够小e_i
,而i
为i
规范向量(g_i
维上为1,否则为0)足够小。换句话说,如果我们用i
表示渐变的| ( Q(z, w + delta*e_i) - Q(z, w) ) / ( delta ) - g_i | < eps
| Q(z, w + delta*e_i) - Q(z, w) - delta * g_i | < delta*eps
维,那么你需要检查是否
| Q(z, w + delta*e_i) - ( Q(z, w) + delta * g_i ) | < delta*eps
归结为检查
Q(z, w + delta*e_i) ≈ ( Q(z, w) + delta * g_i )
因此检查是否
private TileOverlay mTiles;
private String MAP_URL_FORMAT = "file:///android_asset/%d/x%d_y%d.png";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tile_overlay);
SupportMapFragment mapFragment =
(SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap map) {
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
LatLng supperland = new LatLng(31.978574, 34.744219);
map.moveCamera(CameraUpdateFactory.newLatLngZoom(supperland, 9));
TileProvider tileProvider = new UrlTileProvider(256, 256) {
@Override
public synchronized URL getTileUrl(int x, int y, int zoom) {
String s = String.format(Locale.US, MAP_URL_FORMAT, zoom, x, y);
URL url = null;
try {
url = new URL(s);
} catch (MalformedURLException e) {
throw new AssertionError(e);
}
return url;
}
};
mTiles = map.addTileOverlay(new TileOverlayOptions().tileProvider(tileProvider));
}
这是他们的等式,只需功能。