(a) max |analytic gradient - finite difference| = 5.9e-11;  loss(s + 3.7) - loss(s) = -1.1e-16
(b) smallest Hessian eigenvalues: [0.         0.01056746 0.01486109]   second smallest 0.0106 > 0, so the rank is N - 1 = 19

(c) RMS error of the centered MLE
    n =   100: RMS error 0.5548
    n =   200: RMS error 0.4308
    n =   400: RMS error 0.3233
    n =   800: RMS error 0.2382
    n =  1600: RMS error 0.1700
    n =  3200: RMS error 0.1235
    n =  6400: RMS error 0.0855
    log-log slope over n >= 400: -0.479  (theory: -0.5)

(d) separable data: pairs (i, j) always won by the item with the larger true score
    unregularized loss at 1 x (true centered scores): 3.71e-01
    unregularized loss at 2 x (true centered scores): 2.35e-01
    unregularized loss at 4 x (true centered scores): 1.25e-01
    unregularized loss at 8 x (true centered scores): 5.86e-02
    unregularized loss at 16 x (true centered scores): 2.64e-02
    ridge   0.1: |s_hat - mean| = 1.08   loss 0.5601
    ridge  0.01: |s_hat - mean| = 4.59   loss 0.3066
    ridge 0.001: |s_hat - mean| = 12.09   loss 0.1269
