private void updateParam(List<Instance> instances) {
		Map<Integer, Double> update = new HashMap<Integer, Double>();
		for (Instance instance : instances) {
			double y = Double.parseDouble(instance.getLabel().toString()) ; //yi
			double wx = this.innerProduct(instance);
			for (Map.Entry<Integer, Double> entry : instance.getFeatureVector().getVector().entrySet()){
				int key = entry.getKey(); //j
				if (!this.linearParam.containIndex(key)) {
					continue;
				}
				if (!update.containsKey(key)) {
					update.put(key, 0.0);
				}
				double value = entry.getValue(); //xij
				double updatedValue = update.get(key) + y * linkFunction(-1 * wx) * value 
						- (1-y) * linkFunction(wx) * value;
				update.put(key, updatedValue);
			}			
		}
		for (Map.Entry<Integer, Double> entry : linearParam.getVector().entrySet()) {
			entry.setValue(entry.getValue() + gd_eta *update.get(entry.getKey()));
		}
	}