Root mean squared error is linked to efficiency. It is not restricted to unbiased estimators unless you add that restriction. If you did not, then you would find that the maximum likelihood estimator or the Bayesian estimator would, in the general case, have a lower squared loss.
For a moment, let us ignore $\sigma$ as a volatility measure and generalize it to $\theta$ a parameter of interest. It could be a center of location, a measure of scale, shape, skew, kurtosis or anything else including a fractile or quantile.
If $\hat{\theta}$ is an estimator, then the efficiency of an estimator is $E[(\hat{\theta}-\theta)^2].$ The RMSE is just a transformation.
In the case of $E[(\hat{\sigma}_t-\sigma_t)^2]$, the $\hat{\sigma_t}$ is the realized volatility, which is obviously observable. The $\sigma_t$ is the true, but unobservable volatility for that day. It is a parameter and is not known.
I created some R code to generate one thousand samples of size ten from the standard normal distribution so you could graphically look at them. I forgot to set the seed, but for this graphic, the MSE for the Maximum Likelihood Estimator (MLE) was .19677 while the MSE for the Pearson and Neyman (PN) unbiased estimator was .22797. The unbiased estimator was roughly 15.8% less efficient, but it was intrinsically more accurate. The trade-off is between precision and accuracy.
Graphically, the difference in the estimators was
Note that RMSE is sometimes estimated in economics by finding the RMSE of the actual minus a prediction. Do note that it is a biased estimator of the population RMSE.
library(ggplot2)
library(export)
rm(list = ls())
x<-matrix(rnorm(10000),ncol = 1000,nrow = 10)
variance_ML<-function(A){
n<-length(as.vector(A))
x_bar<-sum(A)/n
variance<-sum((A-x_bar)**2)/n
return(variance)
}
variance_PN<-function(A){
n<-length(as.vector(A))
x_bar<-sum(A)/n
variance<-sum((A-x_bar)**2)/(n-1)
return(variance)
}
MLE<-apply(x,2,variance_ML)
PN<-apply(x,2,variance_PN)
MSE_MLE<-sum((MLE-1)**2)/length(MLE)
MSE_PN<-sum((PN-1)**2)/length(PN)
graphical_frame<-data.frame(MLE,PN)
g<-ggplot(data = graphical_frame)+geom_density(aes(x=MLE),kernel="gaussian",color="red",show.legend = TRUE)+geom_density(aes(PN),kernel="gaussian",color="blue",show.legend = TRUE)
h<-g+labs(title = "Density Estimate of MLE(Red) and Pearson-Neyman Unbiased Estimator (Blue)",x="Estimator",y="Density")
graph2png(h,file="TBD")