List posts that don’t have a specific tag?

I believe you can filter them out in your original WP_Query using Taxonomy Parameters. Then you can delete the for loop altogether.

$args = array(
    'post_type' => 'post',
    'posts_per_page' =>-1,
    'tax_query' => array(
        array(
            'taxonomy' => 'post_tag',
            'field'    => 'slug',
            'terms'    => array('fun','learning'),
            'operator' => 'NOT IN',
        ),
    ),
);
$wpb_all_query = new WP_Query( $args );