minor optimizations
add plain iteration based gradient descent