With a MLP (regression), is it appropriate to initialize bias in the final layer to be a value near the expected mean?
Cool idea! Looks like it really helps. 

Training starts with smaller error, so you might be able to train the model in shorter time with this trick. You should be okay as long as you initialise the weights properly. 

I trained model with different biases and plotted error at the start and the end of of the training. Expected mean of the data is 100. See code below. 



from keras.models import Sequential 
from keras.layers import Dense
from keras.initializers import Constant, Zeros, Ones
from keras.metrics import mean_squared_error
import matplotlib.pyplot as plt 
import numpy as np

def getData():
    n = 200
    X = np.random.randn(n, 2)
    Y = 20 * X[:,0] + 10 * X[:,1] + 100 
    return X, Y 

def getModel(bias):
    m = Sequential()
    m.add(Dense(1, 
        input_shape=(2,),
        bias_initializer=bias))
    m.compile('adam', loss='mse')
    return m

X, Y = getData()

constants = [0, 1, 10, 50, 100, 150, 200]
loss_at_start = []
loss_at_end = []

for c in constants:
    m = getModel(Constant(c))
    m.fit(X,Y,
        epochs=20,
        validation_split=0.2,
        validation_steps=20,
        steps_per_epoch=1000)
    loss_at_start.append(m.history.history['loss'][0])
    loss_at_end.append(m.history.history['loss'][-1])

plt.plot(constants, loss_at_start)
plt.plot(constants, loss_at_end)
plt.xlabel('Bias')
plt.ylabel('Loss')
plt.legend(['Loss at training start','Loss at training end'])
plt.title('Expected mean: 100')
plt.show()