Mahbubul Hasan(presenter), Zhenghong Li(team member) Faculty Mentors- Dale Bowman, Lih Y Deng, Ching-Chi Yang,
07/21/2021
[Amini,2019]
theta_true, were sampled from \(N(0,Σ)\).correlation_matrix.Discrimination and difficulty paramters were sampled uniformly from \([0.25, 1.75]\) and \([−3, 3]\) respectively, and entries in the Q-matrix were sampled from \(Bern(0.35)\).disc_true, diff_true, and q_matrix.ML2P model(McKinley and Reckase,1980).[Amini,2019]
[Rocca,2019]
Z?j with assessment item i, and difficulty parameter bi , for \(i = 1, ..., I\) and \(j = 1, ..., J\).i does not require skill j to be answered correctly.Q is an element of set of real number JI) \(Q \in \mathbb{R}^{J×I}\) by \(Q_{ji} = 1\) if item \(i\) requires skill \(j\), and \(Q_{ji} = 0\) otherwise.j possesses K latent abilities \(𝛩_j = (𝜃_{j1},...,𝜃_{jK})⊤\), which are not directly observable.uj equal to 1 corresponds with a correct answer, and an entry equal to 0 corresponds with an incorrect answer to a particular item of the exam.For example, if one student answers only questions 1 and 4 incorrect, and another student answers only questions 3 and 7 incorrect, they have the same percentage score. But it is not likely that the two students share the same latent trait values. Questions 3 and 7 may have tested a different skill than items 1 and 4, and could vary greatly in difficulty level.
bi for item i, and a discrimination parameter \(a_{ik} ≥ 0\) for each latent trait k quantifying the level of ability k required to answer item i correctly.j with latent abilities \(𝛩_j = (𝜃_{j_1},...,𝜃_{jK})^⊤\) answering item i correctly asML2p model
\(Q(zi) = \frac{1}{1+e^{-z_i}}\)
k-th and i-th nodes in the second-to-last and output layer, respectively. \(αk\) is the activation of the k-th node in the second-to-last layer, and \(b_i\) is the bias value of the \(i-th\) node in the output layer.num_items and num_skills describe the assessment length and the number of abilities being evaluated by the assessment.Q_matrix is a num_skills by num_items matrix which specifies the relationship between items and abilities.Q-matrix specifies the nonzero weights in the decoder of the VAE, which allows interpretation of network parameters as discrimination/difficulty parameter estimates and the hidden encoded layer as ability parameter estimates.Q_matrix, estimation of these parameters would not be possible.z layer based on those two parameters to generate an input image.enc_hid_arch: is a vector of integers, who’s length determines the number of hidden layers in the encoder, and the entries describe the number of nodes in the hidden layers.num_items (the size of the input layer) and num_skills (the dimension of the encoded distribution).hid_enc_activations: is a vector of strings, which specifies the activation functions to be used in each encoder hidden layer.models_ind <- build_vae_independent(num_items,
num_skills,
Q,
model_type = 2,
enc_hid_arch = enc_arch,
hid_enc_activation = enc_act,
output_activation = out_act)
encoder_ind <- models_ind[[1]]
decoder_ind <- models_ind[[2]]
vae_ind <- models_ind[[3]]
encoder_ind## Model
## Model: "model"
## ________________________________________________________________________________
## Layer (type) Output Shape Param # Connected to
## ================================================================================
## input (InputLayer) [(None, 30)] 0
## ________________________________________________________________________________
## hidden_1 (Dense) (None, 16) 496 input[0][0]
## ________________________________________________________________________________
## hidden_2 (Dense) (None, 8) 136 hidden_1[0][0]
## ________________________________________________________________________________
## z_mean (Dense) (None, 3) 27 hidden_2[0][0]
## ________________________________________________________________________________
## z_log_var (Dense) (None, 3) 27 hidden_2[0][0]
## ________________________________________________________________________________
## z (Concatenate) (None, 6) 0 z_mean[0][0]
## z_log_var[0][0]
## ________________________________________________________________________________
## lambda (Lambda) (None, 3) 0 z[0][0]
## ================================================================================
## Total params: 686
## Trainable params: 686
## Non-trainable params: 0
## ________________________________________________________________________________
## Model
## Model: "model_1"
## ________________________________________________________________________________
## Layer (type) Output Shape Param #
## ================================================================================
## latent_inputs (InputLayer) [(None, 3)] 0
## ________________________________________________________________________________
## vae_out (Dense) (None, 30) 120
## ================================================================================
## Total params: 120
## Trainable params: 120
## Non-trainable params: 0
## ________________________________________________________________________________
## Model
## Model: "model_2"
## ________________________________________________________________________________
## Layer (type) Output Shape Param #
## ================================================================================
## input (InputLayer) [(None, 30)] 0
## ________________________________________________________________________________
## model (Model) [(None, 3), (None, 3), (None, 3 686
## ________________________________________________________________________________
## model_1 (Model) (None, 30) 120
## ================================================================================
## Total params: 806
## Trainable params: 806
## Non-trainable params: 0
## ________________________________________________________________________________
inputs to train_model() include a compiled Keras model, which needs to have autoencoder or VAE structure where the input and output layers are the same dimension. This can be obtained from the third item returned from build_vae_independent() or build_vae_correlated().train_data is a num_train by num_items binary matrix, where entry \((j, i) = 1\) if student \(j\) answered item \(i\) correct, and 0 otherwise.num_epochs.batch_size is set to be 1 (pure stochastic gradient descent), but can be any integer less than or equal to num_train.get_item_parameter_estimates() looks at all trainable parameters of the decoder part of the VAE and returns the values which serve as estimates to the item paramters.build_vae_independent() or build_vae_correlated().model_type defaults to the 2-parameter logistic model, but can be set to 1 for the 1-parameter logistic model.get_item_parameter_estimates() returns the output layer biases and the weights connected to the output layer, which serve as estimates to difficulty and discrimination paramters, respectively.model_type = 1, then only the output layer biases (difficulty parameter estimates) are returned.build_vae_independent(), and assumes that the latent traits are independent of one another. -build_vae_independent() can be useful if the true correlations between latent traits are not known, i.e. correlation_matrix is not given.TensorFlow probability library(this is not working in my computer)Corr latent traits
.
.
! .
.